我读了一些关于如何在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初始化之外,我不知道该怎么做。有什么想法吗?
答案 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
希望它会有所帮助!