【问题标题】:Changing static class variables in Python在 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,或者想知道如何改变。

【问题讨论】:

标签: python class static-variables class-variables


【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2016-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-22
      相关资源
      最近更新 更多