0

クラスと関数のコードを書いているときに、同じ名前の関数とクラスのケースを取り上げました

次のように実行されるコード:

$python test.py

そのために、次の 2 つのシナリオを試みました。

  1. 私は最初にそれらを1つのファイルtest.pyに書き、クラスではなく関数が呼び出されることを知りました

    class ABC:
        def __init__(self):
            a=3
            print a
    
    def ABC():
        b=7
        print b
    
    if __name__=='__main__':
        ABC()
    

    出力:

    7
    
  2. あるファイルtest.pyに関数を書き、別のファイルに同名のクラスを書き込んでインポートしました__init____init__関数が実行されました

    • __init__機能なし

      1. こんにちは。

        class DEF:
            a=2136
            print a
        
      2. test.py:

        from hello import DEF
        
            def DEF():
                b=7
                print b
        
        if __name__=='__main__':
            DEF()
        

      出力:

      2136                                                       
      7
      
    • __init__関数が定義されている

      1. こんにちは。

        class DEF:
            def __init__(self):
            a=2136
            print a
        
      2. test.py

        from hello import DEF 
        def DEF():
            b=7
            print b
        if __name__=='main':
            DEF()
        

      出力:

      7
      
4

2 に答える 2

6

クラスが定義されると、クラスの本体が実行されます。したがって、python がファイルをロードすると、次のように出力されます。2136

class DEF:
    a=2136
    print a

Python は という名前のクラス定義を作成するDEF必要があり、そのためにクラスの本体を関数であるかのように実行します。次に、その関数のローカル名がクラス本体を形成します。

これは、名前を別の関数に置き換えても発生します。また、一度だけ実行されます。トップレベルのコードが再度実行されない前にモジュールがインポートされた場合。

于 2013-05-02T14:16:11.493 に答える
0

なぜ が実行されるのかという疑問が生じた場合print a、python は解析言語です。つまり、クラス定義コードが実行されるため、そこに記述されたときにすべての関数が呼び出されます。print a呼び出したときに呼び出されるのではなくDEF()、実際にはインタープリターが最初にスクリプトを解析するときに呼び出されます。

于 2013-05-02T14:23:02.237 に答える