不实例化类如何调用类属性
我想先初始化一个类,然后调用在初始化时设置的一个属性,但不想再创建一个新的实例。举个测试的例子:
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,然后再通过 var 从 t2 里访问这个属性,可以用 t2.getVar(t2)
或者其他方法来实现。显然,上面的代码是不能工作的,我也很难理解为什么。
实际上,这些类是在一个 wxPython 程序里。它们有一个层级结构:Frame -> Notebook -> Panel -> MenuBar,都是在不同的文件里。我在 Panel 初始化时设置了好几个变量,然后试图从图形界面上的一个菜单项去访问这些变量。到那个时候,Panel 已经初始化并显示出来了,这就是我添加 skipInit 开关的原因。有没有什么想法可以实现这个?
3 个回答
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
2
如果我理解这个问题没错的话,你只需要把你的 t1 实例传递给 t2 的一个实例就可以了。
class t2:
def getVar(self, t1):
print t1.returnVar(t1)
t1_instance = t1()
t2_instance = t2()
t2.getVar(t1_instance)
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()