我創建了一個具有setter屬性的類。有兩種不同的方式來使用這個類,所以一些對象組件的值可以根據場景以不同的順序設置(即,我不想在__init__
期間設置它們)。我已經在這裏包含了一個非財產和它自己的函數來說明什麼是和不在工作。Python忽略屬性獲取者的屬性設置器
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)
這是怎麼回事?
確認它發生在python3以及。好奇答案是什麼。 –
@Travis,setter在調用操作發生時調用,OP沒有執行任何賦值操作 –
...如果最終調用屬性,爲什麼要使用「property」?只需使用正常的方法。 – Bakuriu