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

2 投票
2 回答
17140 浏览
提问于 2025-04-17 01:44

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

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中。

撰写回答