我正在尝试在python的类中添加一个静态int。但这不起作用。
这是我已实现的示例:
XmlNodeConverter
我期待着:
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()
但是它不能那样工作。如果我没有记错的话,则int不是引用,并且在我的课程的每个实例中都不是相同的“ STR_DEPTH”。
我已经知道length-1列表技巧和空类型技巧,但是我真的需要采取笨拙的不可读技巧吗?
自从我上课以来,有没有更好的方法?
答案 0 :(得分:0)
您在哪里:
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
选择了类变量,分配仍会返回到实例变量。