在 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 = 400print(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 中更改静态类变量的主要内容,如果未能解决你的问题,请参考以下文章

关于java静态存储类的一个知识点

如何在 Python 的方法中访问“静态”类变量?

python——面向对象

python面向对象中类对象实例对象类变量实例变量类方法实例方法静态方法

python的静态成员变量实例成员变量静态方法类方法实例方法

如何在Python中定义静态变量