🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.python
Article #27127

Re: Metaklasy w Pythonie

#27127
From: pr
Date: Mon, 04 Jan 2010 12:03
37 lines
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-mail
References: <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