我创建了一个具有带有setter属性的类。有2种不同的方法可以使用此类,因此某些对象组件的值可能会根据情况以不同的顺序设置(即,我不想在__init__
中设置它们)。我在这里包含了一个非财产及其自身的设定函数,以说明什么是有效的,什么是无效的。
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)
上调用getter而不是setter。if __name__ == '__main__':
d1 = Dumbclass()
d1.all_the_things("class 1")
d2 = Dumbclass()
d2.all_the_things("class 2", 4)
这里发生了什么?
最佳答案
简短答案:请将您的行self.priority(priority)
更改为self.priority = priority
说明:仅当您向属性分配某些内容时,才调用Setter。在您的代码中,您没有执行赋值操作。
如果您想了解更多,这里有一些不错的参考资料:
Python descriptors
How does the @property decorator work?
Real Life Example
关于python - Python忽略属性 setter 而支持属性 getter ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39965824/