【问题标题】:Python: Sharing variables between classes/objectsPython:在类/对象之间共享变量
【发布时间】:2011-09-07 19:07:33
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 第一。请大写类名。第二。你为什么不首先使用类级变量?您的 var1 不是实例变量。为什么要避免普通的实例变量?
  • 什么是实例变量?
  • 这是一个全新的问题。 1.实际完成整个 Python教程。 2. 搜索“Python 实例变量”。 3. 在完成整个教程并阅读了数百个关于 Python 实例变量的网页后,再次提问。这是一个基本概念,很难在对不相关问题的评论中涵盖。

标签: python oop class


【解决方案1】:
class class2:
    var2 = class1.var1

这是class1.var1 的当前值的副本。

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

使用class1.var1 而不是复制var2 中的当前值。

【讨论】:

  • 哦,所以当我更改 var1 时,var2 仍然指向未设置的 var1 是什么?现在这是有道理的。感谢您的帮助!
  • 非常有用的文章,有助于理解 python 中的变量以及如何正确复制它们:henry.precheur.org/python/copy_list
【解决方案2】:

关于如何复制变量的所有信息都是真实的,并且推荐的文章得到了很好的解释。但是,如果您使用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()

【讨论】: