在python类中将整数作为静态变量引用

时间:2018-10-08 15:25:28

标签: python

我正在尝试在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列表技巧和空类型技巧,但是我真的需要采取笨拙的不可读技巧吗?

自从我上课以来,有没有更好的方法?

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选择了类变量,分配仍会返回到实例变量。