[Python-de] propery getter mit 2. Parameter

Christian Tismer tismer at stackless.com
Die Jan 3 02:06:55 CET 2006


Andreas Pakulat wrote:

> Aber noch ne andere Frage bzgl. Properties: Die werden wohl nicht
> vererbt oder? Hab grad ne Klasse (von object abgeleitet) erzeugt und in
> dieser:

Die Property wird durchaus vererbt, so wie sie gebaut ist.
Allerdings ist dieses Aufbauen ein einmaliger Vorgang,
den Du explizit ausgelöst hast.
Für eine neue Klasse mußt Du das auch wieder selbst tun.

> def getElement(self):
>   pass
> 
> xml = property(getElement, doc="blah")
> 
> Und dann ne Subklasse die getElement() selbst definiert, aber xml nicht
> selbst setzt.
> 
> Da ich mehrere Klassen habe fuer die ich so ein Property definieren
> wuerde hatte ich gehofft das in einer Basisklasse tun zu koennen...

Das ist möglich. In diesem Fall müßtest Du wie oben beschrieben
den Vorgang des Property-Erzeugens wiederholen, sodaß die
neue Klasse auch ein neues Property-Objekt bekommt.
Der richtige Ansatz, dies zu verallgemeinern wäre, Deinen
Klassen eben dies beizubringen.

Wie? Dazu braucht man Metaklassen.
Metaklassen sind eigene, abgeleitete Klassen, die dasselbe tun
wie es type type für normale Klassen tut, und ein wenig mehr,
in diesem Falle z.B. Dein Property neu erzeugen.

M.a.W. Einfache Vererbung ist etwas statisches. Um dynamisches
Verhalten bei der Klassenerzeugung zu bekommen, muß man
den Vorgang der Klassenerzeugung erweitern.

Ein recht gutes Beispiel dazu findet man hier:
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/197965

happy hacking - chris
-- 
Christian Tismer             :^)   <mailto:tismer at stackless.com>
tismerysoft GmbH             :     Have a break! Take a ride on Python's
Johannes-Niemeyer-Weg 9A     :    *Starship* http://starship.python.net/
14109 Berlin                 :     PGP key -> http://wwwkeys.pgp.net/
work +49 30 802 86 56  mobile +49 173 24 18 776  fax +49 30 80 90 57 05
PGP 0x57F3BF04       9064 F4E1 D754 C2FF 1619  305B C09C 5A3B 57F3 BF04
      whom do you want to sponsor today?   http://www.stackless.com/