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