【问题标题】:how to share a calculated variable between all instances of a method如何在方法的所有实例之间共享计算变量
【发布时间】:2019-05-15 23:40:14
【问题描述】:

我想计算类中的一个值,该值对于该类的所有实例都保持相同,并且只计算一次

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

首先,我应该在a = calculate_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

【问题讨论】:

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


    【解决方案1】:

    类成员只被初始化一次 - 它们在之前(和没有)实例被创建之前被初始化。


    你可以自己测试一下:

    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-class 以避免污染 global():

    class A_base:
        @staticmethod
        def calculate_a():
            print("Calculated")
            return 5
    
    class A:   
        a = A_base.calculate_a()
    

    【讨论】:

      猜你喜欢
      • 2020-07-17
      • 2013-09-26
      • 2019-02-21
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 2019-10-16
      相关资源
      最近更新 更多