用于初学者的Python类

And*_*rev 2 python class

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

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

params = ParamWindow(8)
print params.a
Run Code Online (Sandbox Code Playgroud)

这打印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
Run Code Online (Sandbox Code Playgroud)

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

Fer*_*yer 6

def __init__(self, parent, b):
    self = wx.Frame(parent = parent, id=-1, title="Parameters")
Run Code Online (Sandbox Code Playgroud)

在这里你重新分配self,所以你最终没有参考ParamWindow实例了!你永远不应该那样做!你想要实现什么目标?

    self.a = b
Run Code Online (Sandbox Code Playgroud)

在这里,你分配aself,现在是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
Run Code Online (Sandbox Code Playgroud)

  • +1.除非你真的知道自己在做什么,否则永远不要给自己分配东西. (2认同)