如何在Python中使用静态变量和静态方法


如何在Python中使用静态变量和静态方法


静态变量

在类定义中声明但在方法内部未声明的变量是类或静态变量:

>>> class MyClass:
...     i = 3
...
>>> MyClass.i
3

这会创建一个类级i变量,但这与任何实例级i变量都不同,所以你可以拥有

>>> m = MyClass()
>>> m.i = 4
>>> MyClass.i, m.i
>>> (3, 4)

这与C ++和Java不同,但与C#没有什么不同,在C#中,使用对实例的引用无法访问静态成员。

静态方法

使用装饰器@staticmethod

class C:
    @staticmethod
    def f(arg1, arg2, ...): ...

使用类方法而不是 static 方法,因为该方法接收类类型作为第一个参数,但我对这种方法相对于静态方法的优势仍然有点模糊。如果你也是,那可能没关系。

其他一些实例

>>> class Test(object):
...     i = 3
...
>>> Test.i
3

这里有一些问题。继续上面的例子:

>>> t = Test()
>>> t.i     # 通过实例访问的静态变量
3
>>> t.i = 5 # 但是如果我们分配给实例......
>>> Test.i  # 我们没有改变静态变量
3
>>> t.i     # 我们通过创建一个新属性t.i来覆盖Test.i
5
>>> Test.i = 6 # 通过分配给类来改变静态变量
>>> t.i
5
>>> Test.i
6
>>> u = Test()
>>> u.i
6           # 更改为t不会影响Test的新实例

# 命名空间是一个很棒的主意 - 让我们做更多的事情吧!
>>> Test.__dict__
{'i': 6, ...}
>>> t.__dict__
{'i': 5}
>>> u.__dict__
{}