ファイブ、Pythonの5オブジェクト、クラスメソッド、および静的メソッドが直面しています

5、クラスメソッド、および静的メソッド

説明:クラスメソッドと同様の静的メソッド、彼らは(呼び出すために利用可能なオブジェクト)を呼び出すためにクラスを使用することをお勧めします

1)クラスメソッド

クラスメソッドの定義

  • 修正@classmethod使用します
  • 最初のパラメータがメソッドCLSとして定義され、この方法は、クラスのパラメータによって起動され、自動的に結合しています
class Tiger:
    # 类方法:1、用 @classmethod 修饰;2、定义 cls 形参
    @classmethod
    def info(cls):
        print('info类方法')
        print(cls)
        
print(Tiger)
print('-'*30)

Tiger.info()     # 类方法属于类本身,可用类调用。类方法的第一个参数 cls 绑定到调用该方法的类
print('-'*30)

t = Tiger()
t.info()         # 对象调用类方法,实际上也相当于用类调用类方法,同样也会执行将第一个参数绑定当前类
<class '__main__.Tiger'>
------------------------------
info类方法
<class '__main__.Tiger'>
------------------------------
info类方法
<class '__main__.Tiger'>

比較

  • それがあるかどうか、クラスメソッドの呼び出しやクラスのインスタンス呼び出しが自動的に結合しています
  • コールが自動的にクラスに縛られていないときにオブジェクトを自動的に呼び出してバインドされている方法の例として、パラメータの受け渡しが必要です

2)静的メソッド

静的メソッドを定義します

  • 修正@staticmethod使用します

  • 静的メソッドは、関数に相当し、自動的に結合しません

    class Tiger:
        # 静态方法:用 @staticmethod
        @staticmethod
        def info1():
            print('info1静态方法')
        
        @staticmethod  
        def info2(p):
            print('info2静态方法')
            print(p)
    
    • クラスの静的メソッドの呼び出し

      Tiger.info1()             # 类调用静态方法(无参数时)
      print('-'*30)
      
      Tiger.info2('python')     # 类调用静态方法(有参数时),需要传入参数
      
      info1静态方法
      ------------------------------
      info2静态方法
      python
      
    • オブジェクトは静的メソッドを呼び出します

      t = Tiger()
      
      t.info1()          # 对象调用静态方法(无参数时)
      print('-'*30)
      
      t.info2('python')  # 对象调用静态方法(有参数时),需要传入参数
      print('-'*30)
      
      info1静态方法
      ------------------------------
      info2静态方法
      python
      

3)概要:

方法の例 クラスメソッド staticメソッド
オブジェクトの呼び出し 自動バインディング 自動バインディング 自動的に結合しないでください
クラスの呼び出し 自動的に結合しないでください 自動バインディング 自動的に結合しないでください

おすすめ

転載: blog.csdn.net/qq_36512295/article/details/94547769