使用 class 属性实现类似单例的 class 是一种好习惯吗?

Is it a good practice to implement a singleton-like class using class attributes?

我有一个 class,其中包含一些 variables/states。 我想在我的代码中与许多其他 classes 共享这些状态。 我在网上看了看,发现模块和单例 classes 是一个很好的方法。我最终创建了一个 class 并将所有数据存储为 class 属性并通过 class 本身访问它,如示例:

# foo.py
class Foo(object):
  varx=45
  def foo(x):
    Foo.varx = x

我会将数据导入为:

# bar.py
from foo import Foo
print(Foo.varx) #45
Foo.foo(5)
print(Foo.varx) #5

我想知道像这样使用 classes 属性是否是一种反模式,或者是否存在我在此实现中没有看到的缺点。

由于您的 foo 方法正在改变 class Foo 的状态(而不是任何 instance of Foo), 在这种情况下使用 classmethod 会更 pythonic。另外,请注意,没有必要显式继承自 object,因为所有 python classes 都隐式继承自 object.

class Foo:
    varx = 45

    @classmethod
    def foo(cls, x):
        cls.varx = x

您当前的 foo 方法实现已将 class 的名称硬编码到实现中,这意味着如果您更改 class 的名称,该实现将中断.如果您有另一个 class 继承自 Foo,您希望能够实现 Foo 的方法,那么实现也会中断,因为 class 继承自 [=12] =] 会有不同的名称。