Python:在类/对象之间共享变量

问题描述:

好吧我有两个类,一个依赖于另一个。 所以我需要从第一个类中获得一个变量并在第二个类中使用它。 但第二个变量是不断变化的。 像这样: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 如果我说在改变VAR类之一,它打印的打印VAR1。 但是,当class2得到它仍然是0 ... 我想它仍然指的是旧的var1。 我在做什么错,我应该做什么?

由于

+1

第一。请大写类名称。第二。为什么你首先不使用类级变量?你的'var1'不是一个实例变量。你为什么要避免普通的实例变量? –

+0

什么是实例变量? –

+0

这是一个全新的问题。 1.实际上是完整的** Python教程。 2.搜索“Python实例变量”。 3.在完成整个教程并阅读关于Python实例变量的数百个网页之后,再次提问。这是一个基本的概念,很难涵盖对无关问题的评论。 –

class class2: 
    var2 = class1.var1 

这是class1.var1的电流值的副本。

“我需要从第一类获取变量,并在第二次使用它”

使用class1.var1代替var2使当前值的副本。

+0

OH所以当我更改var1时,var2仍然指向什么var1不会是? 现在,这是有道理的。谢谢您的帮助! –

+0

这就是“复制”的意思,是正确的。 –

+1

非常有用的文章,这将有助于了解python中的变量以及如何制作正确的副本:http://henry.precheur.org/python/copy_list – Ski

有关变量如何被复制的所有信息都是真实的,推荐的文章已经很好地解释了。但是,如果您使用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不同的ID(这是在第2行var1)和self.var1

如果你想从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()