3

__init__Pythonクラスの先頭にある宣言は、 ?のステートメントと同等かどうか疑問に思いました。例えば

import sys

class bla():
    print 'not init'
    def __init__(self):
        print 'init'
    def whatever(self):
        print 'whatever'

def main():
    b=bla()
    b.whatever()
    return 0

if __name__ == '__main__':
    sys.exit( main() )

出力は次のとおりです。

not init
init
whatever

補足として、今私はまた得ます:

Fatal Python error: PyImport_GetModuleDict: no module dictionary!

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

これがなぜであるかについてのアイデアはありますか?前もって感謝します!

4

4 に答える 4

6

いいえ、同等ではありません。type のオブジェクトをインスタンス化する前であってもprint 'not init'、クラスの定義中にステートメントが実行されます。blabla

>>> class bla():
...    print 'not init'
...    def __init__(self):
...        print 'init'
not init

>>> b = bla()
init
于 2012-04-28T08:22:01.497 に答える
0

c=bla()後で行うと印刷されるだけなので、それらはまったく同じではありませんinit

また、あなたmain()をちょうどに減らしreturn 0ても、not init.

于 2012-04-28T08:22:17.343 に答える
0

そのような宣言は、クラス全体に対するものです。print が print ステートメントではなく変数の割り当てである場合、変数はクラス変数になります。これは、クラスの各オブジェクトが独自のものを持つのではなく、クラス全体の変数が 1 つしかないことを意味します。

于 2012-04-28T08:23:00.570 に答える
0

それらは同等ではありません。initメソッドの外側の print ステートメントは、クラスが定義されたときに一度だけ呼び出されます。たとえば、main() ルーチンを次のように変更するとします。

def main():
    b=bla()
    b.whatever()
    c = bla()
    c.whatever()
    return 0

次の出力が得られます。

not init
init
whatever
init
whatever

not init print ステートメントは、クラスが定義されているときに 1 回実行されます。

于 2012-04-28T08:23:36.153 に答える