如何在方法的所有实例之间共享计算出的变量

时间:2018-12-14 17:12:27

标签: python python-3.x oop static-methods class-variables

我想在该类中计算一个值,该值对于该类的所有实例均保持不变,并且仅计算一次

class A:
    a = calculate_a()
    def calculate_a():
        return 5

首先,我应该为calculate_a()中的a = calculate_a()设置什么参考? self.calculate_a()A.calculate_a()都不正确(未解析的参考) 我需要的是,在创建第二个实例时,不会再次调用calculate_a()

instance1 = A()  -> calls calculate_a() to set value for a;
instance2 = A()  -> uses the value of a calculated above without calling calculate_a

1 个答案:

答案 0 :(得分:0)

类成员仅初始化一次-在创建实例之前(没有实例)进行初始化。


您可以自己测试:

def calculate_a():
    print("Calculated")
    return 5

class A:   
    a = calculate_a()

执行此操作将打印一次'Calculated',即使没有创建任何实例也是如此。

def calculate_a():
    print("Calculated")
    return 5

class A:   
    a = calculate_a()

input("Order?")
k = A()
i = A()
c = A()

仅执行一次此打印的'Calculated'-在要求输入'Order?'之前,它只执行一次-在输入程序后,不再输出任何输出。


更多信息:

您可以将“ init”方法放入holder类中,以避免污染global():

class A_base:
    @staticmethod
    def calculate_a():
        print("Calculated")
        return 5

class A:   
    a = A_base.calculate_a()