ゼロベース入門python 3.7——基礎知識総括(十九)類の方法
4169 ワード
クラスの属性が分類できる以上.では、方法も分類できます.クラスメソッドは、インスタンスメソッドに分割できます.静的メソッドとクラスメソッド.@classmethod装飾を用いた方法をクラスメソッドと呼ぶ.@staticmethodで装飾されたものを静的方法と呼ぶ.何の装飾もしないのを実例方法と呼ぶ.
一.インスタンスメソッド
クラスに定義されたデフォルトのメソッドは、インスタンスメソッドに属します.構造メソッドも含めて特殊なインスタンスメソッドに属しますインスタンスメソッドの最大の特徴は、selfパラメータを含むことである.このメソッドを呼び出すインスタンスオブジェクトをバインドします.通常、クラスオブジェクトによって が直接呼び出される.は、クラス名によってインスタンスメソッドを呼び出すことができる.ただしselfパラメータ を手動でバインドする必要があるクラス名呼び出し時にselfパラメータをバインドしないと異常 が放出される. selfは、1つのパラメータを完全に任意に入力することができる.しかし、selfパラメータにむやみにパラメータを渡すと、プログラムの実行がクラッシュします.
クラスのインスタンスオブジェクトでクラスメンバーにアクセスする方法をバインドメソッドと呼び、クラス名でクラスメンバーを呼び出す方法を非バインドメソッドと呼びます.
二.クラスメソッド
クラスメソッドはインスタンスメソッドと似ています.少なくとも1つのパラメータを含める必要があります.このパラメータの名前はselfではなくclsであり、pythonはクラス自体がclsに自動的にバインドされると述べ、クラスのインスタンスオブジェクトではないことに注意します.このパラメータも約束されています
@classmethodがない場合はインスタンスメソッドですクラス名を使用してクラスメソッドを直接呼び出すことを推奨する インスタンスオブジェクト呼び出しは使用できますが、 は推奨されません.
三.スタティツクメソッド
静的メソッドは実際には普通の関数です.定義空間が違うだけです.静的メソッドはクラスという空間に定義されています.関数はグローバル関数に定義されており,静的手法にもself,clsのような特殊なパラメータはない.pythonは、クラスまたはオブジェクトをバインドする必要はありません.そのため、クラスメソッドではクラスメソッドやクラスプロパティを呼び出すことはできません.クラス名呼び出し インスタンスオブジェクト呼び出し
実際のプログラミングでは、クラスメソッドや静的メソッドはほとんど使用されません.なぜなら、それらの代わりに関数を使用して所望の機能を実現することができるからです.
一.インスタンスメソッド
クラスに定義されたデフォルトのメソッドは、インスタンスメソッドに属します.構造メソッドも含めて特殊なインスタンスメソッドに属します
class Person:
def __init__(self):
self.name = " ",
self.age = 20,
self.city = ' '
def getName(self):
return self.name
class Person:
def __init__(self):
self.name = " ",
self.age = 20,
self.city = ' '
def getName(self):
return self.name
a = Person()
print(a.name)
(' ',)
class Person:
def __init__(self):
self.name = " ",
self.age = 20,
self.city = ' '
def getName(self):
return self.name
a = Person()
print(Person.getName(a))
(' ',)
class Person:
def __init__(self):
self.name = " ",
self.age = 20,
self.city = ' '
def getName(self):
return self.name
a = Person()
print(Person.getName())
Traceback (most recent call last):
File "/Users/apple/Documents/ /python3/python21.py", line 10, in
print(Person.getName())
TypeError: getName() missing 1 required positional argument: 'self'
class Person:
def __init__(self):
self.name = " ",
self.age = 20,
self.city = ' '
def getName(self):
print(" ")
a = Person()
Person.getName("python")
クラスのインスタンスオブジェクトでクラスメンバーにアクセスする方法をバインドメソッドと呼び、クラス名でクラスメンバーを呼び出す方法を非バインドメソッドと呼びます.
二.クラスメソッド
クラスメソッドはインスタンスメソッドと似ています.少なくとも1つのパラメータを含める必要があります.このパラメータの名前はselfではなくclsであり、pythonはクラス自体がclsに自動的にバインドされると述べ、クラスのインスタンスオブジェクトではないことに注意します.このパラメータも約束されています
class Person:
def __init__(self):
self.name = " ",
self.age = 20,
self.city = ' '
def getName(self):
print(" ")
@classmethod
def add(cls):
print(" ")
@classmethodがない場合はインスタンスメソッドです
class Person:
def __init__(self):
self.name = " ",
self.age = 20,
self.city = ' '
def getName(self):
print(" ")
@classmethod
def add(cls):
print(" ")
Person.add()
class Person:
def __init__(self):
self.name = " ",
self.age = 20,
self.city = ' '
def getName(self):
print(" ")
@classmethod
def add(cls):
print(" ")
a = Person()
a.add()
三.スタティツクメソッド
静的メソッドは実際には普通の関数です.定義空間が違うだけです.静的メソッドはクラスという空間に定義されています.関数はグローバル関数に定義されており,静的手法にもself,clsのような特殊なパラメータはない.pythonは、クラスまたはオブジェクトをバインドする必要はありません.そのため、クラスメソッドではクラスメソッドやクラスプロパティを呼び出すことはできません.
class Person:
def __init__(self):
self.name = " ",
self.age = 20,
self.city = ' '
def getName(self):
print(" ")
@staticmethod
def add(name):
print(name)
class Person:
def __init__(self):
self.name = " ",
self.age = 20,
self.city = ' '
def getName(self):
print(" ")
@staticmethod
def add(name):
print(name)
Person.add(" ")
class Person:
def __init__(self):
self.name = " ",
self.age = 20,
self.city = ' '
def getName(self):
print(" ")
@staticmethod
def add(name):
print(name)
a = Person()
a.add(" ")
実際のプログラミングでは、クラスメソッドや静的メソッドはほとんど使用されません.なぜなら、それらの代わりに関数を使用して所望の機能を実現することができるからです.