У меня есть дескриптор класса, и его метод __set__
не вызывается. Я долго смотрел на это несколько часов и не отвечал за это. Но ниже я заметил, что когда я назначаю 12 MyTest.X, он стирает дескриптор свойства для X и заменяет его значением 12. Таким образом вызывается запрос печати для функции Get. Это хорошо.Почему дескриптор Python __set__ не вызван
Но инструкция печати для функции __set__
НЕ НАЗЫВАЕТСЯ вообще. Я что-то упускаю?
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__
Вы действительно хотите использовать атрибуты класса, а не создавать экземпляр экземпляра? – user2357112
В моем случае, который очень сложный, это обертывание статических методов, которые в конечном итоге передаются статическим методам C++. –
По крайней мере, у SWIG возникли проблемы с протоколами дескриптора, поэтому решение может быть и на вашем оберточном слое C++, если вы делаете более сложные вещи, чем показано здесь. – schlenk