我可以在 python 中创建一个单例静态 class 变量吗?

Can I create a singleton static class variable in python?

我有以下场景:

class A:
   b = 1
   pass

x = A()
y = A()

我可以更改此 class 以便 x.b = 2 等同于 A.b = 2,我的意思是,当更改一个实例的静态变量时它会更改所有实例?

编辑:我希望能够处理此 class 的多个不同实例。

可以,但是有点丑:

class A:
    b = 1
    def __setattr__(self, name, value):
        if name == "b":
            setattr(A, "b", value)
        else:
            super().__setattr__(name, value)

现在可以正常工作了:

>>> a = A()
>>> a.b = 3
>>> A.b
3
>>> A.b = 5
>>> a.b
5

真正的问题是:你为什么想要那个?


如果你打算经常使用它,为它写一个装饰器可能会很好:

def sharedclassvar(variable):
    def __setattr__(self, name, value):
        if name in self.__class__._sharedclassvars:
            setattr(self.__class__, name, value)
        elif hasattr(self.__class__, "__oldsetattr__"):
            self.__class__.__oldsetattr__(self, name, value)
        else:
            super().__setattr__(name, value)
    def decorator(cls):
        if not hasattr(cls, "_sharedclassvars"):
            cls._sharedclassvars = []
            if hasattr(cls, "__setattr__"):
                cls.__oldsetattr__ = getattr(cls, "__setattr__")
                cls.__setattr__ = __setattr__
        cls._sharedclassvars.append(variable)
        return cls
    return decorator

然后您可以这样定义 class:

@sharedclassvar("b")
class A:
    b = 1