在类之间共享变量

时间:2014-05-10 00:06:16

标签: python

我正在尝试在不同的类中使用相同的变量(列表)(这是我的代码的基本示例,但基本上是相同的功能,在Class1中获取列表然后在Class2中使用它):< / p>

class Class1:
    def __init__(self):
        self.dosomething():
    def dosomething(self):
        x = [99, 98]
        return x

class Class2:
    def __init__(self):
        y = Class1()
        print y 

但是当我调用Class2而不是打印list [99, 98]时,我会得到类似的结果:

<myfile.Class1 instance at 0xb74c59ac>

是否有可能分享如何做到这一点?我做错了,但我在文档中找不到。

2 个答案:

答案 0 :(得分:2)

这是因为你还没有调用class1的“dosomething”方法。

实际上我错了,你有,你只需要称之为self.x而不是x

另外,你想调用y.x来访问数组,而不是x = ...你需要self.x =,它需要进入init。我会为你修改你的代码。

class Class1:
  def __init__(self):
    self.dosomething()
  def dosomething(self):
    self.x = [99, 98]


class Class2:
  def __init__(self):
    y = Class1()
    print y.x 

我实际上只是建议为class1执行此操作:

class Class1:
  def __init__(self):
    self.x = [99, 98]

和Class2:

class Class2:
  def __init__(self):
   self.y = Class1().x

答案 1 :(得分:1)

  

但是当我调用Class2而不是打印列表[99,98]时,我会得到这样的结果:

这实际上是你期望的。当您实例化Class1()时,您正在分配y并将其分配给Class2

现在,如果您运行以下代码:

class Class1:
    def dosomething(self):
        x = [99, 98]
        return x

class Class2:
    def __init__(self):
        y = Class1()
        print y.dosomething()

你会得到:

>>> Class2()
[99, 98]

作为输出。因为您正在设置Class1,然后在dosomething()上调用y并打印结果。

但是,现在,您必须明白,Class2()的构造函数执行完毕后,y不再存在,以及x。如果要保留值,则需要使用类的成员,如下所示:

class Class1:
    def __init__(self):
        self.x = [99, 98]

    def get_x(self):
        return self.x

class Class2:
    def __init__(self):
        self.y = Class1()

    def get_x(self):
        print self.y.get_x()

所以你可以这样做:

>>> z = Class2()
>>> print(z.get_x())
[99, 98]
>>> print(z.get_x())
[99, 98]

其中[99, 98]self.x Class1中包含的值。

我希望有些事情能够更加明确,现在是时候用Python打开一本关于OOP的书了,如果这就是你已经在做的事情,请阅读下一章! : - )

您必须了解面向对象编程中的类的全部要点是实际封装数据,通过行为公开它。所以当你说你想要从一个类到另一个类共享变量时,就会出现根本错误!这就是为什么我向你展示了一种方法来交换类之间变量引用的数据,而不是实际访问另一个类的成员。

  

我做错了什么但我在文档中找不到。

事情是,这完全取决于你真正想做的事情。并且不要告诉我你正在尝试共享变量等......这只是技术细节。真正的问题是你要解决的问题。