Derzeit mache ich es auf diese Weise:einen Dekorateur in einer Klasse mit Zugang zur (aktuellen) Klasse Erstellen selbst
class Spam(object):
decorated = None
@classmethod
def decorate(cls, funct):
if cls.decorated is None:
cls.decorated = []
cls.decorated.append(funct)
return funct
class Eggs(Spam):
pass
@Eggs.decorate
def foo():
print "spam and eggs"
print Eggs.decorated # [<function foo at 0x...>]
print Spam.decorated # None
ich Notwendigkeit Lage sein, dies in einer Unterklasse zu tun, wie gezeigt. Das Problem ist, dass ich nicht herausfinden kann, wie man das decorated
Feld, das zwischen Instanzen nicht geteilt wird, macht. Im Moment habe ich eine hackische Lösung, indem ich es zunächst auf None
setze und dann überprüfe, wenn die Funktion eingerichtet ist, aber das funktioniert nur in einer Richtung. Mit anderen Worten, wenn ich Eggs
unterwerfe und dann etwas mit der Eggs.decorate
Funktion dekoriere, betrifft dies alle Unterklassen.
Ich denke, meine Frage ist: ist es möglich, muable Klassenfelder haben, die nicht zwischen Basis-und Unterklassen geteilt werden?
Nur aus Neugier: Warum müssen Sie im Auge behalten, welche Funktionen eingerichtet wurden? –
Gute Frage. Ich tue das eigentlich nicht, aber ich habe dieses Szenario als Beispiel für diese Frage entwickelt, weil es ein einfacher Grund ist, auf die Klasse zugreifen zu müssen. –