Я создал класс, который имеет свойство с установщиком. Существует два разных способа использования этого класса, поэтому значения некоторых компонентов объекта могут быть установлены в другом порядке в зависимости от сценария (т. Е. Я не хочу устанавливать их во время __init__
). Я включил не-свойство с его собственной функцией набора здесь, чтобы проиллюстрировать, что есть и не работает.Python игнорирует свойство setter в пользу свойства getter
class Dumbclass(object):
def __init__(self):
self.name = None
self.__priority = None
@property
def priority(self):
return self.__priority
@priority.setter
def priority(self, p):
self.__priority = p
def set_name(self, name):
self.name = "dumb " + name
def all_the_things(self, name, priority=100):
self.set_name(name)
self.priority(priority)
print self.name
print self.priority
Когда я запускаю следующее, он возвращает TypeError: 'NoneType' object is not callable
. Я исследовал с pdb и обнаружил, что он вызывал геттер вместо установщика в self.priority(priority)
.
if __name__ == '__main__':
d1 = Dumbclass()
d1.all_the_things("class 1")
d2 = Dumbclass()
d2.all_the_things("class 2", 4)
Что здесь происходит?
Подтверждено, что это происходит и в python3. Любопытный ответ. –
@Travis, setter вызывается, когда происходит операция присваивания, и OP не выполнял операцию присвоения –
... почему вы используете 'свойство', если вы в конечном итоге * вызываете * атрибут? Просто используйте обычный метод. – Bakuriu