在python中初始化静态类atributes

在python中初始化静态类atributes,python,class,static-variables,Python,Class,Static Variables,我有以下课程 课堂测试: x=None这是一个静态变量,由该类创建的所有对象共用 @类方法 def初始值不包括: cls.x=5 请注意,实际上x是一个对象,它需要与从该类创建的所有对象共用,我无法编写例如x=5的代码,因此我需要一个函数来初始化它。那么,我如何调用只初始化x一次而不是为每个创建的对象初始化x的函数呢?在python中,跳过x=None并直接在initializeXcls中定义x通常也是一种好做法吗?在类构造函数中,您可以编写一个if检查,查看是否已经创建了类属性 if Test

我有以下课程

课堂测试: x=None这是一个静态变量,由该类创建的所有对象共用 @类方法 def初始值不包括: cls.x=5
请注意,实际上x是一个对象,它需要与从该类创建的所有对象共用,我无法编写例如x=5的代码,因此我需要一个函数来初始化它。那么,我如何调用只初始化x一次而不是为每个创建的对象初始化x的函数呢?在python中,跳过x=None并直接在initializeXcls中定义x通常也是一种好做法吗?

在类构造函数中,您可以编写一个if检查,查看是否已经创建了类属性

if Test.x is None:
  # Do initialization

你为什么不能做这样的事

def_new_x:
return[1,2,3]您可以在类级别初始化并设置它

class Test:
    x = None  # this is a static variable common to all object created from this class
    @classmethod
    def initializeX(self, cls):
        type(cls).x = 5    # Test.x

c1 = Test()
c2 = Test()

c1.initializeX(c1)
print(c1.x)   # 5
print(c2.x)   # 5

Test.x = 10
print(c1.x)   # 10
print(c2.x)   # 10
输出

5
5
10
10

我可以这样做,但我希望这个类能够独立运行,所以当我从类导入测试中执行类似操作时,我不必导入该函数,也不必导入其他函数。如果您将测试导入到另一个模块中,该类仍然会调用_new_x,而您无需导入它。我不知道这一点,但仍然是在一个包含多个类的文件中,我认为这会造成一个混乱,在这些类之外有函数。很高兴知道,虽然我有这个选项可能在另一种情况下有用。