Python: 在类/对象之间共享变量
好的,我有两个类,其中一个依赖于另一个。
所以我需要从第一个类获取一个变量,然后在第二个类中使用它。
但是第二个变量是不断变化的。
就像这样:
class class1 :
var1 = 0
def meth1 (self):
self.var1 += 1
class class2:
var2 = class1.var1
def see (self):
return self.var2
obj1 = class1()
obj2 = class2()
obj1.meth1()
obj2.see()
这样的话,返回的结果是0,而不是1。
如果我在第一个类中打印var1,它会打印出那个变化的变量。
但是当第二个类获取这个变量时,它仍然是0……
我想这可能是因为它仍然指向旧的var1。
我到底做错了什么,应该怎么做呢?
谢谢
2 个回答
0
关于变量是如何被复制的所有信息都是正确的,推荐的文章也解释得很好。但是如果你使用 class1.var1
,你永远无法得到 class1
中的 self.var1
的值。你可以通过以下代码来检查原因:
class Class1 :
var1 = 0
def meth1 (self):
self.var1 += 1
print(id(self.var1))
class Class2:
def meth2 (self):
print(id(Class1.var1))
obj1 = Class1()
obj2 = Class2()
obj1.meth1()
obj2.meth2()
在这里,你会发现 Class1.var1
(在第2行的 var1
)和 self.var1
的 ID 是不同的。
如果你想从 Class2
获取 self.var1
的值,你必须在类外部初始化 var1
,并在你给它加数字的函数内部将其设为全局变量:
var1 = 0
class class1 :
def meth1 (self):
global var1
var1 += 1
class class2:
def meth2 (self):
print(var1)
obj1 = class1()
obj2 = class2()
obj1.meth1()
obj2.meth2()
6
class class2:
var2 = class1.var1
这是class1.var1
当前值的一个副本。
“我需要从第一个类获取一个变量,并在第二个类中使用它。”
直接使用class1.var1
,而不是把当前值复制到var2
中。