我创建了一个具有setter属性的类。有两种不同的方法可以使用这个类,因此某些对象组件的值可能会根据场景以不同的顺序设置(即我不想在__init__
期间设置它们)。我在这里包含了一个非属性的set属性来说明什么是有效的。
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,发现它调用了getter而不是self.priority(priority)
的setter。
if __name__ == '__main__':
d1 = Dumbclass()
d1.all_the_things("class 1")
d2 = Dumbclass()
d2.all_the_things("class 2", 4)
这里发生了什么?
答案 0 :(得分:2)
简答:请将您的专线self.priority(priority)
更改为self.priority = priority
说明:只有在为属性分配内容时才会调用Setter。在您的代码中,您没有进行任务操作。
如果您想了解更多信息,请参阅以下内容:
答案 1 :(得分:0)
由于尝试将优先级视为all_the_things方法中的方法,因此您遇到此问题。此时它已经是一个属性,因此您可以像变量一样分配它:
def all_the_things(self, name, priority=100):
self.set_name(name)
self.priority = priority