Python-Class(クラス)ライフサイクルとクラス属性方法(魔法方法)

8492 ワード

組み込み属性とメソッド
メソッド名
タイプ-
さぎょう__init__
方法
クラスインスタンス化時にこの関数を自動的に呼び出す__del__
方法
オブジェクトがメモリに破棄される前に、自動的に呼び出されます.__str__
方法
クラスのインスタンス印刷時にこの関数を呼び出す(戻る)ユーザーが見た__repr__
方法
上のstr関数と同じように、開発者が見たものに戻ります.__ getattr __
方法
存在しないプロパティを呼び出すと、このメソッドにアクセスします.__call__
方法
クラスがこのメソッドを実装すると、このタイプのオブジェクトを関数として使用することに相当し、カッコ演算子を再ロードすることに相当します.
詳細はPython 3標準ライブラリを参照
ライフサイクル
  • オブジェクトは呼び出し ()から作成され、ライフサイクルは
  • から開始する.
  • オブジェクト__del__メソッドが呼び出されると、ライフサイクルは
  • に終了する.
  • は、オブジェクトのライフサイクル中にアクセスすることができ、オブジェクトのプロパティ、またはオブジェクトにメソッド
  • を呼び出すことができる.
    例:
    class Cat:
        def __init__(self, name):
            self.name = name
            print('       ')
    
        def __del__(self):
            print('       ')
    
    #  Tom        
    tom = Cat('Tom')
    print(tom.name)
    print('-' * 50)
    

    次のように実行します.
           
    Tom
    --------------------------------------------------
           
    

    del削除tomを呼び出します
    -- omit --
    
    #  Tom        
    tom = Cat('Tom')
    print(tom.name)
    del tom
    print('-' * 50)
    
           
    Tom
           
    --------------------------------------------------
    

    Class魔法の方法
    上の表と説明の差は多くないので、コードを貼って例を挙げます.
    class Cat:
        #               
        def __init__(self, name):
            self.name = name
            print('%s       ' % self.name)
    
        #           ,      
        def __del__(self):
            print('       ')
    
        #               (  )     
        def __str__(self):
            return '  Cat  '
    
        #      str    ,             
        def __repr__(self):
            return '__repr__'
    
        #                  
        def __getattr__(self, item):
            item = 'A'
            print('     ,    %s' % item)
    
        #            ,                  ,            
        def __call__(self, *args, **kwargs):
            print('   %s   __call__       ' % args)
    
    
    #  Tom        
    tom = Cat('Tom')
    print(tom.name)
    # del tom
    print('-' * 50)
    print(tom)
    tom.sex
    print('*' * 50)
    tom('Tim')
    
    

    怠け者は次の実行結果を見て
    Tom       
    Tom
    --------------------------------------------------
      Cat  
         ,    A
    **************************************************
       Tim   __call__       
           
    
    __call__定義がなければtom('Tim')でインスタンスで直接クラスを呼び出すと保持されますよ~