68

Python クラスがあり、それに対して pylint を実行しました。それが与えた1つのメッセージは次のとおりです。

Warning: Method could be a function

これは、インスタンス変数を使用しないため、このメソッドをクラスから移動した方がよいということでしょうか?

C# では、これを静的メソッドにします。ここで行う最もpythonicなことは何ですか?

4

1 に答える 1

81

クラスにまったく触れない場合は、関数に移動するのが一般的です。

クラス属性を操作する場合は、classmethodデコレーターを使用します。

@classmethod
def spam(cls, ...):
   # cls is the class, you can use it to get class attributes

classmethodand staticmethod(メソッドが最初のパラメーターからクラスへの参照を取得しないことを除いて、前者と同じです) はごく最近導入されました。これは、一部の Python プログラマーが静的メソッドとクラス メソッドを避けるために使用されていることを意味します。

一部の筋金入りの Python プログラマーは、これらのデコレーターは物事を複雑にするだけだと言うでしょう。他の何人かの人々 (通常は元 C# または Java プログラマー) は、関数を使用するだけでは十分にオブジェクト指向ではないと言うでしょう。あくまでも好みの問題だと思います。

于 2010-04-20T09:49:52.480 に答える