Article View: pl.comp.lang.python
Article #27127Re: Metaklasy w Pythonie
From: pr
Date: Mon, 04 Jan 2010 12:03
Date: Mon, 04 Jan 2010 12:03
37 lines
3338 bytes
3338 bytes
> Definicja klasy, to też jej utworzenie.>>> class K(object): pass Tak jestem tego świadom, dlatego pytam o rozwiązanie typu lazy load :-) > O ile nie zadeklarujesz podklasy MyMeta z MyMeta jako jej metaklasą, > to raczej nie ma szans na spełnienie tego warunku. Właśnie tylko pytanie, czy to jest takie w "stylu Pythona" i co z działaniem takiego rozwiązania (tzn. czy można się potem spodziewać jakiś pułapek manipulując klasą jej atrybutami i obiekatmi). > Ale możesz w ramach lub niezależnie od Twojej metaklasy utworzyć > taki mechanizm, że z chwilą stworzenia danej klasy tak naprawdę > utworzona zostanie jedynie "pusta" klasa-wrapper, która będzie się > zachowywać tak, że dopiero z chwilą pierwszego pobrania > jakiegokolwiek jej atrybutu będzie ona tworzyć właściwą klasę. > (Jak będę miał chwilę, to naszkicuję, jak to mogłoby wyglądać). Też myślałem nad czymś podobnym, problem w tym, że to ładnie wychodziło podczas tworzenia samej instacji ( B().myattr), natmiast gdzieś się pogubiłem podczas wywołania typu B.myattr (w zasadzie to były tylko rozważania, nie implmentowałem tego rozwiązania jeszcze) > Pytanie tylko, w czym Ci przeszkadza utworzona a niewykorzystana > klasa? W cały problem nie będę wchodził bo jest dość skomplikowany (min. wykorzystywany zew. aplikacja, która na wejściu przyjmuje klasę określonego typu z określonymi atrybutami etc..), natmoast wartości atrybutów tejże klasy są wynikiem dość kosztownych obliczeń. Dlatego jeśli bedę miał 100 klas, a wykorzystam tylko 10 (może tak się zdarzyć) to 90 razy wykonam zbędne obliczenia. Natmoast wołanie na każdej instacji np. funkcji obliczającej mi te parametry na żądanie, typu: obj.clc_param() nie wchodzi w grę.. Korzystanie z klasy ma się ograniczyć do B.myattr i B().myattr (korzysta z tego automat nie programista). Dzięki. Pozdrawiam.
Technical Details
Message-ID:
<8abb33d1-4a4a-408c-9791-a6b003cccaef@p8g2000yqb.googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!news.nask.pl!news.nask.org.pl!newsfeed00.sul.t-online.de!t-online.de!border2.nntp.dca.giganews.com!nntp.giganews.com!postnews.google.com!p8g2000yqb.googlegroups.com!not-for-mailReferences:
<acd8187e-60ea-4eda-9eb6-52f5d3754d2b@a21g2000yqc.googlegroups.com> <79eee268-9a76-4950-a13b-d0ce21d5879f@35g2000yqa.googlegroups.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!news.nask.pl!news.nask.org.pl!newsfeed00.sul.t-online.de!t-online.de!border2.nntp.dca.giganews.com!nntp.giganews.com!postnews.google.com!p8g2000yqb.googlegroups.com!not-for-mail From: pr <cricogik@gmail.com> Newsgroups: pl.comp.lang.python Subject: Re: Metaklasy w Pythonie Date: Mon, 4 Jan 2010 04:03:24 -0800 (PST) Organization: http://groups.google.com Lines: 43 Message-ID: <8abb33d1-4a4a-408c-9791-a6b003cccaef@p8g2000yqb.googlegroups.com> References: <acd8187e-60ea-4eda-9eb6-52f5d3754d2b@a21g2000yqc.googlegroups.com> <79eee268-9a76-4950-a13b-d0ce21d5879f@35g2000yqa.googlegroups.com> NNTP-Posting-Host: 81.186.224.2 Mime-Version: 1.0 X-Trace: posting.google.com 1262606604 14717 127.0.0.1 (4 Jan 2010 12:03:24 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Mon, 4 Jan 2010 12:03:24 +0000 (UTC) Complaints-To: groups-abuse@google.com Injection-Info: p8g2000yqb.googlegroups.com; posting-host=81.186.224.2; posting-account=0dYzQQoAAADD4mKBs1MFtArJhD70zsVy User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2),gzip(gfe),gzip(gfe) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit