我想初始化一个类,然后调用在初始化期间设置的属性,但不创建另一个实例。作为测试示例:
class t1:
def __init__(self, skipInit=False):
if not skipInit:
print 'Initialized'
self.var = 123456
else:
print 'Not Initialized'
def returnVar(self):
return self.var
class t2:
def getVar(self):
print t1.returnVar(t1)
我想用t1()
初始化t1,稍后,从t2访问 var ,使用t2.getVar(t2)
或从t2内以其他方式访问。显然上面的代码不起作用,我很难理解为什么。
实际上这些类是在wxPython程序中。有一个Frame-> Notebook-> Panel-> MenuBar层次结构,所有这些都在不同的文件中。我在Panel初始化期间设置了许多变量,并尝试从GUI上的一个菜单项访问这些变量。此时面板已经初始化并显示,这就是我添加skipInit开关的原因。关于如何做到这一点的任何想法?
答案 0 :(得分:2)
没有任何名为t1.var
的内容,所以当然你无法访问它。 var
是t1
实例的属性; 它不存在于类中。由于您可以拥有t1
的任意数量的实例,因此t2
的实例方法无法知道应该查找属性的 t1
实例var
没有你告诉它。你可以在实例化t2
时执行此操作。
# t1 class is the same as yours
class t2:
def __init__(self, t1):
self.t1 = t1
def getVar(self):
print self.t1.returnVar(t1)
obj1 = t1()
obj2 = t2(obj1) # give the t2 instance the t1 instance
print obj2.getVar()
答案 1 :(得分:2)
如果我正确理解了问题,那么您只需要将t1的实例传递给t2的实例。
class t2:
def getVar(self, t1):
print t1.returnVar(t1)
t1_instance = t1()
t2_instance = t2()
t2.getVar(t1_instance)
答案 2 :(得分:0)
也许这就是你想要的?
class T1(object): # Subclassing object makes a new-style class
def __init__(self):
self.var = 123456
t1 = T1()
# t1 is now an instance of T1. This calls __init__ to set it up.
print t1.var # 123456