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の学習を始めました。上記のコードsnipppetは、http: //www.zetcode.com/wxpython/menustoolbars/からのものです。self.shst変数に頭を悩ませようとしています。なぜselfキーワードをプレフィックスとして付ける必要があるのですか?

私が読んだところによると、selfキーワードは__init__メソッドのそのコンテキストで使用され、インスタンス変数を「宣言」しますが、作成者は__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は、Testクラスのすべての関数にアクセスできるべきではありませんか?

4

2 に答える 2

1

でインスタンス変数を定義する必要はありません__init__。それらはどこでも定義できます。Pythonは動的な言語であり、いつでもオブジェクトに属性を追加することができます。

于 2012-12-07T13:31:10.133 に答える
1

shstプレフィックスを付けなかった場合self.、スコープ外になり、メソッドの終了後にガベージコレクションされるローカル変数になります。割り当ての前にPythonクラス/オブジェクトメンバーを宣言する必要はありません。

于 2012-12-07T13:35:56.343 に答える