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

时间:2011-09-07 19:07:33

标签: python oop class

好的我有两个班,一个依赖另一个班。 所以我需要从第一个类中获取一个变量并在第二个类中使用它。 但第二个变量是不断变化的。 像这样:

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。 我做错了什么,我该做什么?

由于

2 个答案:

答案 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()