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中访问调用者。
答案 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()