在不创建实例的情况下调用类属性

问题描述:

我想初始化一个类,然后调用初始化期间设置的属性,但不创建另一个实例。作为测试示例:在不创建实例的情况下调用类属性

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开关的原因。任何想法如何做到这一点?

+0

那么,这没有多大意义。你是否知道类和实例之间的区别? 'self.var'是一个实例属性,不创建它有时会打败一个类的目的。也许一个具体的例子会更好地解释你想要的东西。看来你可以只写一个函数来完成初始化,你只需要调用它一次... – 2011-04-19 22:03:39

+0

对不起,如果我不清楚。实例'self.var'必须在初始化过程中设置,稍后访问时不需要再次初始化。总之,我不能修改上面的't1'。那么如何在不初始化t1的情况下访问实例't1.var'? – 2011-04-19 22:27:16

没有什么叫t1.var,所以当然你不能访问它。 vart1实例的属性;它不存在于课堂上。既然你可以有任意数量的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() 
+0

我明白了!非常感谢,特别是对于解释。在实际的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 
+0

我希望...'print t1.var'必须在不同的类中,这会产生我的问题。另请参阅上面的我的评论。 – 2011-04-19 22:30:44

+0

@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)