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

时间:2018-06-13 17:44:16

标签: python

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

PSTDFTERMID

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

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

但是,现在它已经在C2初始化之外,我不知道该怎么做。有什么想法吗?

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:2)

我认为您应该考虑使用classmethod装饰器。您必须按类/实例对象调用类方法一次,并且将跨实例共享变量,直到进一步修改。

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

希望它会有所帮助!