如何在类实例之间传递变量或获取调用者?

17 投票
6 回答
66247 浏览
提问于 2025-04-17 02:46
class foo():
  def __init__(self)
    self.var1 = 1

class bar():
  def __init__(self):
    print "foo var1"

f = foo()
b = bar()

在foo这个地方,我做了一些事情,让"var1"的值变成了1。在bar这个地方,我想要访问var1的内容。

我该如何在bar的实例b中访问foo的实例f里的var1呢?

简单来说,这两个类是不同的wxframe窗口。例如,在一个窗口里,用户可能在输入数据,而在第二个窗口里,它会用这些输入的数据来生成输出。在C++中,我会有一个指向调用者的指针,但我不知道在Python中该如何访问调用者。

6 个回答

7

和任何语言一样。

class Foo(object):
    def __init__(self):
        self.x = 42

class Bar(object):
    def __init__(self, foo):
        print foo.x

a = Foo()
b = Bar(a)
10

没有人提供过一个代码示例,说明如何在不改变初始化参数的情况下做到这一点。你可以简单地在外部作用域使用一个变量来定义这两个类。不过,如果一个类是在与另一个类不同的源文件中定义的,这种方法就不行了。

var1 = None
class foo():
  def __init__(self)
    self.var1 = var1 = 1

class bar():
  def __init__(self):
    print var1

f = foo()
b = bar()
22

在wxPython中,如果你想让不同的页面能够访问和编辑相同的信息,可以考虑在你的主框架(MainFrame,或者你给它起的其他名字)中创建一个信息类的实例,然后把这个实例传递给它创建的其他页面。举个例子:

class info():
    def __init__(self):
        self.info1 = 1
        self.info2 = 'time'
        print 'initialised'

class MainFrame():
    def __init__(self):
        a=info()
        print a.info1
        b=page1(a)
        c=page2(a)
        print a.info1

class page1():
    def __init__(self, information):
        self.info=information
        self.info.info1=3

class page2():
    def __init__(self, information):
        self.info=information
        print self.info.info1

t=MainFrame()

输出结果是:

initialised
1
3
3

信息只初始化了一次,这说明只有一个实例存在,但页面1把info1这个变量改成了3,而页面2也注意到了这个变化。

撰写回答