好的我有两个班,一个依赖另一个班。 所以我需要从第一个类中获取一个变量并在第二个类中使用它。 但第二个变量是不断变化的。 像这样:
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。 如果我在第一类中说print var1,则会打印出已更改的var。 但是当class2得到它时它仍然是0 ... 我猜它仍然是指旧的var1。 我做错了什么,我该做什么?
由于
答案 0 :(得分:6)
class class2:
var2 = class1.var1
这是当前值class1.var1
的COPY。
“我需要从第一个类中获取变量并在第二个类中使用它”
使用class1.var1
而不是复制var2
中的当前值。
答案 1 :(得分:0)
有关变量如何变换的所有信息都是正确的,并且推荐的文章得到了很好的解释。但是,如果您使用class1.var1
,则永远不会从self.var1
获得class1
的值。您可以使用以下代码检查原因:
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。
如果您希望从self.var1
获取Class2
的值,则必须在类外部初始化var1
,并在函数中将其设置为全局,并在其中添加数字:< / p>
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()