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
)。
所以我正在考虑采用一种约定,即所有静态方法都只使用类对象调用。如果违反此约定,是否有任何静态分析工具会警告我?