调用class属性而不为该类创建实例

时间:2011-04-19 21:40:15

标签: python

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

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

3 个答案:

答案 0 :(得分:2)

没有任何名为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()

答案 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