[英]Python ignoring property setter in favor of property getter
我創建了一個具有帶有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。 在您的代碼中,您沒有執行賦值操作。
如果您想了解更多,這里有一些不錯的參考資料:
由於要在all_the_things方法中將優先級視為一種方法,因此您遇到了此問題。 此時,它已經是一個屬性,因此您可以像分配變量一樣將其分配給它:
def all_the_things(self, name, priority=100):
self.set_name(name)
self.priority = priority
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.