如何在python中的类实例之间创建共享对象?

2024-04-19 22:00:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我读了一些关于如何在python中的类实例之间创建共享变量的文章。一种方法是在类初始化之前定义这个变量。虽然这适用于变量,但似乎不适用于我想要的。你知道吗

class C1:
    def __init__(self, a, b):
        self.c = a + b

class C2:
    obj1 = C1(x,y)
    def __init__(self):
        self.d = 1

obj2 = C2

如何为类C1的实例obj1设置变量x和y?如果我们在C2初始化中定义这个实例,那么我们可以编写

obj2 = C2(var1,var2)

但是,现在它在C2初始化之外,我不知道怎么做。你知道吗?你知道吗


Tags: 实例方法self定义initdef文章class
2条回答

我不确定我是否正确,这种方法有什么问题?你知道吗

class C1:
    def __init__(self, a, b):
        self.c = a + b

x = 5
y = 3

class C2:
    obj1 = C1(x,y)
    def __init__(self):
        self.d = 1
        print(self.obj1.c)

obj2 = C2()

另一种方法

class C2:
    obj1 = None
    def __init__(self,ob):
        self.d = 1
        self.obj1 = ob

    def show(self):
        print(self.obj1.c)

x = 5
y = 3
obj1 = C1(x,y)
obj2 = C2(obj1)
obj2.show()

我认为您应该考虑使用classmethod装饰器。必须按类/实例对象调用一次class方法,变量将在实例之间共享,直到进一步修改。你知道吗

class C1:
   def __init__(self, a, b):
       self.c = a + b

class C2:
   obj1 = None
   def __init__(self):
      self.d = 1

   @classmethod
   def class1(cls, x, y):
       cls.obj1 = C1(x, y)

C2.class1(2, 3)

obj2 = C2()
print(obj2.obj1.c)  # Output would be 5
obj22 = C2()
print(obj22.obj1.c) # Output would be same as above i.e 5

希望能有帮助!你知道吗

相关问题 更多 >