Ich habe einen Deskriptor für eine Klasse, und seine __set__
-Methode wird nicht aufgerufen. Ich habe lange eingehend nach diesem Thema gesucht und habe dafür keine Antwort. Aber was ich unten bemerkte ist, dass wenn ich MyTest.X 12 zuweise, löscht er den Eigenschaftsdeskriptor für X und ersetzt ihn durch den Wert 12. Also wird die print-Anweisung für die Get-Funktion aufgerufen. Das ist gut.Warum wird der Python-Deskriptor __set__ nicht aufgerufen
Aber die print-Anweisung für die __set__
Funktion wird überhaupt nicht aufgerufen. Fehle ich etwas?
class _static_property(object):
''' Descriptor class used for declaring computed properties that don't require a class instance. '''
def __init__(self, getter, setter):
self.getter = getter
self.setter = setter
def __get__(self, instance, owner):
print "In the Get function"
return self.getter.__get__(owner)()
def __set__(self, instance, value):
print "In setter function"
self.setter.__get__()(value)
class MyTest(object):
_x = 42
@staticmethod
def getX():
return MyTest._x
@staticmethod
def setX(v):
MyTest._x = v
X = _static_property(getX, setX)
print MyTest.__dict__
print MyTest.X
MyTest.X = 12
print MyTest.X
print MyTest.__dict__
Möchten Sie wirklich Klassenattribute verwenden, statt eine Instanz zu instanziieren? – user2357112
In meinem Fall, der sehr kompliziert ist, ist dies Wrapping statische Methoden, die letztlich an C++ statische Methoden weitergegeben wird. –
Zumindest hatte SWIG einige Probleme mit den Deskriptor-Protokollen, daher könnte die Lösung auch in Ihrer C++ - Wrapper-Ebene liegen, wenn Sie komplexere Dinge als hier gezeigt haben. – schlenk