在 Python 中更改静态类变量
Posted
技术标签:
【中文标题】在 Python 中更改静态类变量【英文标题】:Changing static class variables in Python 【发布时间】:2018-06-22 18:43:43 【问题描述】:如何更改类的静态变量?我希望通过某种输入来改变它。
class MyClass:
var1 = 1
var2 = 4
def __init__(self, var3, var4):
self.var3 = var3
self.var4 = var4
我想改变的是 var1 og var2,或者想知道如何改变。
【问题讨论】:
检查这个问题***.com/questions/68645/… 【参考方案1】:class Whatever():
b = 5
def __init__(self):
Whatever.b = 9999
boo = Whatever()
print(boo.b) # prints 9999
boo.b = 500
print(boo.b) # prints 500
Whatever.b = 400
print(boo.b) # prints 500
# since its a static var you can always access it through class name
# Whatever.b
【讨论】:
这是错误的。最后一个print(boo.b)
打印 500,而不是 400。
你是对的@PoweredByRice。据我了解,原因在于boo.b = 500
行创建了一个对象变量boo.b
,它隐藏了类变量whatever.b
。因此,当您在最后一行打印boo.b
时,您正在打印“新”对象变量。这可以通过从头开始创建任何类,然后运行boo = whatever()
、whatever.b = 400
和print(boo.b)
来检查。现在的结果是 400。【参考方案2】:
这取决于您何时需要重新绑定类属性。您也可以稍后在创建对象时这样做:
mc = MyClass(1, 2)
mc.var1 = 20
mc.var2 = 40
在类体内创建或更改的属性与通过分配给属性在外部创建的属性没有区别。
【讨论】:
【参考方案3】:如果要更改类变量,可以将它们分配给__init__
范围内的变量:
class MyClass:
var1 = 1
var2 = 4
def __init__(self, var3, var4):
self.var1 = var3
self.var2 = var4
c = MyClass(100, 200)
>>>c.var1, c.var2
输出:
(100, 200)
【讨论】:
以上是关于在 Python 中更改静态类变量的主要内容,如果未能解决你的问题,请参考以下文章
python面向对象中类对象实例对象类变量实例变量类方法实例方法静态方法