簡體   English   中英

在python類中將整數作為靜態變量引用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM