我有一个类,它有一个复杂的数据成员,我想保持“静态”。我想用一个函数初始化它一次。像这样的蟒蛇:

def generate_data():
    ... do some analysis and return complex object e.g. list ...

class Coo:
    data_member = generate_data()
    ... rest of class code ...

函数generate_data需要很长时间才能完成并返回在正在运行的程序范围内保持不变的数据。我不希望每次实例化类COO时都运行它。
此外,要验证,只要我不将任何内容分配给data_member中的__init__,它将保持“静态”?如果COO中的一个方法向data_member添加了一些值(假设它是一个列表),那么这个添加会对其余的实例可用吗?
谢谢

最佳答案

你说得对。data_member将创建一次,并且对所有coo实例都可用。如果任何实例修改了它,那么该修改对所有其他实例都是可见的。
下面是一个演示所有这些的示例,其输出显示在末尾:

def generate_data():
    print "Generating"
    return [1,2,3]

class coo:
    data_member = generate_data()
    def modify(self):
        self.data_member.append(4)

    def display(self):
        print self.data_member

x = coo()
y = coo()
y.modify()
x.display()

# Output:
# Generating
# [1, 2, 3, 4]

10-02 02:54