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

时间:2011-09-21 14:39:18

标签: python variables instance

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

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

f = foo()
b = bar()

在foo中,我正在做一些让“var1”设置为1的东西 在栏中,我想访问var1

的内容

如何从bar

的实例b中访问foo的类实例f中的var1

基本上这些类是不同的wxframe。因此,例如在一个窗口中用户可能正在输入输入数据,在第二窗口中,它使用该输入数据来产生输出。在C ++中,我会有一个指向调用者的指针,但我不知道如何在python中访问调用者。

6 个答案:

答案 0 :(得分:15)

作为wxPython中不同页面访问和编辑相同信息的一般方法,请考虑在MainFrame(或任何你称之为)类中创建info类的实例,然后将该实例传递到它创建的任何其他页面上。例如:

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
只有在证明只有一个实例但page1已将info1 varible更改为3并且page2已注册该更改时,

info才会初始化。

答案 1 :(得分:6)

没有人提供代码示例,显示了在不更改init参数的情况下执行此操作的方法。您可以简单地在外部作用域中使用定义两个类的变量。如果在另一个源文件中定义了一个类,那么这将不起作用。

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

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

f = foo()
b = bar()

答案 2 :(得分:5)

与任何语言相同。

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

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

a = Foo()
b = Bar(a)

答案 3 :(得分:1)

或者,您可以拥有一个公共基类,两个派生类都从该基类继承类变量var1。这样,派生类的所有实例都可以访问该变量。

答案 4 :(得分:0)

类似的东西:

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

class bar():
  def __init__(self, foo):
    print foo.var1

f = foo()
b = bar(foo)

你应该能够在Python中传递对象,就像在c ++中传递指针一样。

答案 5 :(得分:0)

也许这是自问这个问题以来添加到语言中的...

全局关键字会有所帮助。

x = 5

class Foo():
    def foo_func(self):
        global x    # try commenting this out.  that would mean foo_func()
                    # is creating its own x variable and assigning it a
                    # value of 3 instead of changing the value of global x
        x = 3

class Bar():
    def bar_func(self):
        print(x)

def run():
    bar = Bar()     # create instance of Bar and call its
    bar.bar_func()  # function that will print the current value of x

    foo = Foo()     # init Foo class and call its function
    foo.foo_func()  # which will add 3 to the global x variable

    bar.bar_func()  # call Bar's function again confirming the global
                    # x variable was changed 


if __name__ == '__main__':
    run()