用于初学者的Python类

时间:2011-11-03 10:07:34

标签: python class

你可以帮我找到问题吗?有效的Python代码:

class ParamWindow:
    def __init__(self, b):
        self.a = b
        print self.a

params = ParamWindow(8)
print params.a

这打印8和8.好的。然后我做:

class ParamWindow:
    def __init__(self, parent, b):
        self = wx.Frame(parent = parent, id=-1, title="Parameters")
        self.a = b
        print self.a

params = ParamWindow(None, 8)
print params.a

它说“ParamWindow实例没有属性'a'”。为什么不呢?我告诉他自己是Frame然后添加一个字段“a”(此时没有错误)但是当我要求打印它(打印行出错)时,忘记了“a”存在... 我哪里错了? 感谢。

1 个答案:

答案 0 :(得分:6)

def __init__(self, parent, b):
    self = wx.Frame(parent = parent, id=-1, title="Parameters")

在此您重新分配self,因此您最终不再参考ParamWindow实例了!你永远不应该那样做!你想要实现什么目标?

    self.a = b

在此,您将a分配给self,现在是Frame,而不是ParamWindow。永远不会定义ParamWindow.a,稍后您会收到错误。

也许你想从Frame 继承?如果是这样,您的代码应如下所示:

class ParamWindow(wx.Frame):
    def __init__(self, parent, b):
        # Initialize the superclass (wx.Frame).
        super(ParamWindow, self).__init__(parent=parent, id=-1, title="Parameters")
        self.a = b
        print self.a