0
class Example(wx.Frame):

    def __init__(self, *args, **kwargs):
        super(Example, self).__init__(*args, **kwargs) 

        self.InitUI()

    def InitUI(self):    

        menubar = wx.MenuBar()
        fileMenu = wx.Menu()
        viewMenu = wx.Menu()

        self.shst = viewMenu.Append(wx.ID_ANY, 'Show statubar', 
            'Show Statusbar', kind=wx.ITEM_CHECK)
...

我最近开始学习 python 和 wxPython。上面的代码片段来自http://www.zetcode.com/wxpython/menustoolbars/。我试图了解self.shst变量。为什么必须在它前面加上 self 关键字?

根据我的阅读,在 __init__ 方法的上下文中使用 self 关键字来“声明”实例变量,但作者在 __init__ 中没有shst声明

编辑 根据您的回答,我做了以下测试:

class Test(object):
    def __init__(self):
        self.x = 20
    def func(self):
        self.y = 10
    def getVal(self):
        return self.y


def main():
    t = Test()
    print t.getVal()
    print dir(t)

if __name__ == '__main__':
    main()

我无法在 getVal() 函数中访问 self.y,并且在 dir(t) 的输出中看不到 y。测试类中的每个函数不应该可以访问 self.y 吗?

4

2 回答 2

1

没有必要在__init__. 它们可以在任何地方定义。Python 是一种动态语言,可以在任何时候向对象添加属性。

于 2012-12-07T13:31:10.133 回答
1

如果您没有前缀shstself.那么它只是一个超出范围的局部变量,并在方法退出后被垃圾收集。无需在分配之前声明 python 类/对象成员。

于 2012-12-07T13:35:56.343 回答