[英]Reference to integer as static variable inside python class
我正在嘗試在python中的類中具有靜態int。 但這是行不通的。
這是我已實現的示例:
class MyDict(dict):
STR_DEPTH = -1
def __init__(self, **kwargs):
super(MyDict, self).__init__(**kwargs)
self.__dict__.update(name = kwargs.get("name", ""))
def __str__(self):
self.STR_DEPTH += 1
res = self.name + '\n'
for k in self.keys():
res += '\t'*self.STR_DEPTH + k + " = " + str(self[k])
res += '\n'
self.STR_DEPTH -= 1
return res
def main():
d1 = MyDict(one=MyDict())
d1["two"] = 2
d1["one"]["one"] = 1
d1["one"]["two"] = MyDict(three=3)
d1["four"] = 4
print d1
if __name__ == "__main__":
main()
我期望:
four = 4
two = 2
one =
two =
three = 3
one = 1
但是那樣行不通。 如果我沒有記錯的話,則int不是引用,並且在我的類的每個實例中都不是相同的“ STR_DEPTH”。
我已經知道length-1列表技巧和空類型技巧,但是我真的需要采取笨拙的不可讀技巧嗎?
自從我上課以來,有沒有更好的方法?
您在哪里:
self.STR_DEPTH += 1
替換為:
MyDict.STR_DEPTH += 1
和您遞減值的位置相同。
分配給self.STR_DEPTH
將創建一個新的實例變量,該變量隱藏通過self
對類變量的訪問。 您可以使用self.STR_DEPTH
來訪問類變量,前提是您沒有同名的實例變量,但是如果您想重新綁定該類變量,則必須直接引用它。
請注意, self.STR_DEPTH += 1
實際上只是self.STR_DEPTH = self.STR_DEPTH + 1
簡寫,因此,即使右手self.STR_DEPTH
選擇了類變量,分配仍會返回到實例變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.