簡體   English   中英

如何從 class 中更改 class 變量值?

[英]How to change class variable value from within the class?

我對 python 相當陌生,目前正在從事一個項目。 以下是我的尺寸 class:

class Dimension:
    dpi = 0
    padding_x = 200 * dpi
    padding_y = 100 * dpi

我正在從另一個名為 Splash 的 class 設置 dpi 值:

class Splash:
if __name__ == '__main__':
    Dimension.dpi = 1.6
    print("x padding : {}".format(Dimension.padding_x))  # prints 0

所以我的問題是,當我嘗試打印它時,我將 dpi 的值設為 1.6,即使我設置了 dpi 值,padding_x 或 padding_y 的相應值也是 0。 當變量 dpi 的值改變時,padding_x 或 y 的值不應該也改變嗎?

您將 dpi 聲明為 0,並且因為您將這些變量用作 static 變量,所以它將保留其原始值。 無論 object 的實例如何,Static 變量都會保留值。 你應該做的是:

class Dimension:
    dpi = 0
    padding_x = 200
    padding_y = 100
    def __init__(self):
        self.padding_x = self.padding_x*self.dpi

class Splash:
    if __name__ == '__main__':
        Dimension.dpi = 1.6
        a = Dimension()
        print("x padding : {}".format(a.padding_x))

您仍然可以將 dpi 用作 static 變量,但最好使用構造函數來初始化其他變量

如果您仍想用作 static,請執行以下操作:

class Dimension:
    dpi = 0
    padding_x = 200
    padding_y = 100

class Splash:
    if __name__ == '__main__':
        Dimension.dpi = 1.6;
        Dimension.padding_x=200*Dimension.dpi
        print("x padding : {}".format(Dimension.padding_x)) 

使用 static 方法更改值:

class Dimension:
    dpi = 0
    padding_x = 200
    padding_y = 100
    @staticmethod
    def static(dpi):
        Dimension.dpi = dpi
        Dimension.padding_x *= Dimension.dpi
        Dimension.padding_y *= Dimension.dpi
class Splash:
    if __name__ == '__main__':
        Dimension.static(1.6);
        print("x padding : {}".format(Dimension.padding_x)) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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