Pythonのクラスメンバー関数、静的関数、メンバーの関数の比較
4318 ワード
宣言方式から見ると、一般メンバー関数は最も一般的な方法である.
クラスメンバー関数は
静的関数は
呼び出し方式から見ると、一般関数と後者の違いが大きく、一般関数はクラスのインスタンスでのみ呼び出され、その後、両者はクラス名で呼び出されます.
その後、クラスメソッドと静的メソッドの最も核心的な違いは、クラスメソッドには
この回答からクラスメソッドについてのまとめ:メソッドは、自分がベースクラスによって呼び出すか、またはあるサブクラスによって呼び出されるかを判断することができる .がサブクラスによって呼び出されると、メソッドは、ベースクラスのインスタンスではなくサブクラスのインスタンス を返すことができる.がサブクラスによって呼び出されると、メソッドはサブクラスの他のclassmethod を呼び出すことができる.
一般的にclassmethodはstaticmethodに完全に代わることができる.staticmethodの唯一の利点は、呼び出し時に真の関数を返し、呼び出すたびに同じインスタンスを返すことです(classmethodはベースクラスとサブクラスに対して異なるbound methodインスタンスを返します)が、これはほとんど役に立たないことです.ただし、staticmethodはサブクラスでclassmethodと書き換えることができ、逆も同様であるため、staticmethodをすべてclassmethodに変更して必要に応じて使用する必要はありません.
作者:霊剣リンク:https://www.zhihu.com/question/20021164/answer/537385841出典:著作権は作者の所有であることを知っている.商業転載は著者に連絡して許可を得てください.非商業転載は出典を明記してください.
class Foo:
def plain_func():
pass
クラスメンバー関数は
class Foo:
@classmethod
def class_func():
pass
静的関数は
class Foo:
@staticmethod
def static_func():
pass
呼び出し方式から見ると、一般関数と後者の違いが大きく、一般関数はクラスのインスタンスでのみ呼び出され、その後、両者はクラス名で呼び出されます.
class Foo:
def plain_func(self):
print("plain_func")
@classmethod
def class_func(cls):
print("class_func")
@staticmethod
def static_func():
print("static_func")
#
foo = Foo()
foo.plain_func()
#
Foo.class_func()
Foo.static_func()
その後、クラスメソッドと静的メソッドの最も核心的な違いは、クラスメソッドには
cls
パラメータがあり、静的メソッドにはcls
パラメータがないことである.cls
は、クラスインスタンスを参照するthis
ポインタとして理解される.この回答からクラスメソッドについてのまとめ:
一般的にclassmethodはstaticmethodに完全に代わることができる.staticmethodの唯一の利点は、呼び出し時に真の関数を返し、呼び出すたびに同じインスタンスを返すことです(classmethodはベースクラスとサブクラスに対して異なるbound methodインスタンスを返します)が、これはほとんど役に立たないことです.ただし、staticmethodはサブクラスでclassmethodと書き換えることができ、逆も同様であるため、staticmethodをすべてclassmethodに変更して必要に応じて使用する必要はありません.
作者:霊剣リンク:https://www.zhihu.com/question/20021164/answer/537385841出典:著作権は作者の所有であることを知っている.商業転載は著者に連絡して許可を得てください.非商業転載は出典を明記してください.