面向初学者的Python类

面向初学者的Python类,python,class,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(par

你能帮我找到问题吗?工作正常的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’”。为什么没有呢?我告诉他self是帧,然后添加了一个字段“a”(此时没有错误),但当我要求打印它(打印行错误),它忘记了“a”的存在。。。 我错在哪里? 谢谢

在这里,您重新分配了
self
,因此不再引用
ParamWindow
实例!你不应该那样做!你想达到什么目标

    self.a = b
在这里,您将
a
分配给
self
,它现在是
,而不是
参数窗口
ParamWindow.a
永远不会被定义,稍后会出现错误

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

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

+1.除非你真的知道自己在做什么,否则永远不要给self赋值。是的,但是错误会在寻址到“a”时返回,但不会在赋值时返回。这正常吗?为什么作业线上不写smth bad?总的来说:我应该如何写以获得一个带有附加字段“a”的帧?谢谢。@AndrewLazarev,因为
self
现在与原始实例无关。您可以为它分配任何您喜欢的内容,但它不会影响实例。@Ferdinand Beyer,oook,I C!谢谢。请告诉我:如果关键字中有“super”,为什么我的eclipse不突出显示它呢这不是一个关键词。它只是一个内置函数。
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