Pythonでは、クラスからだけでなく、インスタンスからも静的メソッドを呼び出すことができます。
class X:
@staticmethod
def f():
print('f')
x = X()
X.f()
x.f() # same as above
これは、操作するインスタンスしかない場合に便利です。結局のところ、x.__class__.f()
の代わりに書きたい人x.f()
。
しかし、コードの多くの読者(私を含む)はx.f()
、それがインスタンスメソッドであるかのように解釈する傾向があることがわかりました。つまり、実行されるものはすべて、を使用または変更すると想定しますx
。場合によっては、これによりバグが発生することもありました(開発者がのセマンティクスを誤って解釈した場合f
)。
そのため、すべての静的メソッドがクラスオブジェクトのみを使用して呼び出されるという規則を採用することを考えていました。この規則に違反した場合に警告する静的分析ツールはありますか?