これは Python で静的メソッドを模倣する正しい方法ですか? Python は静的メソッドを許可しますか?
class C(object):
def show(self,message):
print("The message is: {}".format(message))
m = "Hello World!"
C.show(C,message=m)
The message is: Hello World!
これは Python で静的メソッドを模倣する正しい方法ですか? Python は静的メソッドを許可しますか?
class C(object):
def show(self,message):
print("The message is: {}".format(message))
m = "Hello World!"
C.show(C,message=m)
The message is: Hello World!
他の言語からの静的メソッドの慣用的な翻訳は、通常、モジュール レベルのメソッドです。
def show(message):
print("The message is: {}".format(message))
python に@staticmethod
s があることを示す答えは正しく、また誤解を招きます。通常は、モジュール レベルの関数を使用するだけで正しいのです。
使用する必要があります@staticmethod
:
@staticmethod
def show(message):
print("The message is: {}".format(message))
デコレータを使用できます@classmethod
。それは問題になりません。さらに
派生クラスに対してクラス メソッドが呼び出される場合、派生クラス オブジェクトは暗黙の最初の引数 ( http://docs.python.org/3.3/library/functions.html#classmethod ) として渡されます。
class C1(object):
@classmethod
def show(cls,message):
print("[{}] The message is: {}".format(cls,message))
class C2(C1):
pass
m = "Hello World!"
C2.show(message=m)
# vs. C1.show(message=m) with output [<class '__main__.C1'>] The message is: Hello World!
[<class '__main__.C2'>] The message is: Hello World!