在不创建实例的情况下调用类属性
我想初始化一个类,然后调用初始化期间设置的属性,但不创建另一个实例。作为测试示例:在不创建实例的情况下调用类属性
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程序中。有一个框架 - >笔记本 - >面板 - >菜单栏层次结构,全部在单独的文件中。在Panel初始化期间,我设置了许多变量,并尝试从GUI上的某个菜单项访问这些变量。此时面板将被初始化并显示,这就是我添加skipInit开关的原因。任何想法如何做到这一点?
没有什么叫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()
我明白了!非常感谢,特别是对于解释。在实际的wx程序中,我最终命名了像上面的obj1这样的实例,并将它们作为参数传递给菜单栏的孩子。像魅力一样工作。 – 2011-04-20 04:39:52
也许这就是你想要的?
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
我希望...'print t1.var'必须在不同的类中,这会产生我的问题。另请参阅上面的我的评论。 – 2011-04-19 22:30:44
@Murat:所以其他类需要引用你的't1'实例,而不是类(我称之为'T1')。 – 2011-04-19 22:45:26
如果我正确地理解了这个问题,那么你只需要将你的t1的实例传递给t2的一个实例。
class t2:
def getVar(self, t1):
print t1.returnVar(t1)
t1_instance = t1()
t2_instance = t2()
t2.getVar(t1_instance)
那么,这没有多大意义。你是否知道类和实例之间的区别? 'self.var'是一个实例属性,不创建它有时会打败一个类的目的。也许一个具体的例子会更好地解释你想要的东西。看来你可以只写一个函数来完成初始化,你只需要调用它一次... – 2011-04-19 22:03:39
对不起,如果我不清楚。实例'self.var'必须在初始化过程中设置,稍后访问时不需要再次初始化。总之,我不能修改上面的't1'。那么如何在不初始化t1的情况下访问实例't1.var'? – 2011-04-19 22:27:16