Python静态或非静态

Python static or not static

我最近开始使用 PyCharm,它会告诉我只要我的方法之一可以是静态的(只要我不使用任何成员)。

我想知道无论何时都可以将方法设为静态是否是一个好习惯。我知道这在其他(编译)语言中是一个坏习惯,但感觉 Python 它实际上会更轻。通常由 PyCharm 建议的此类更正由 PEP 编号支持,但有 none 用于此。

长话短说;博士 我是否应该将我的方法声明为静态的,即使我不需要静态地使用它们?

一个方法,一个 class 的函数属性,如果它不可能使用第一个参数,一个 class 的实例,可以声明为静态的。使用未使用的 parameter/bug 定义函数通常不是一个好主意。如果缺少 use 是一个错误,因为应该使用参数,那么应该修复它。如果缺少使用不是一个错误,那么(一般来说),应该从 header.

中删除该参数

PyCharm 还应建议,如果 non-use 不是错误,则从 class 中删除函数并从定义中删除未使用的 self 参数,以便它可以在不需要不相关的 class 实例的情况下调用。 Python 不是 Java。 Python 使用模块而不是 classes 作为默认函数容器。示例:

def C:
    def fmeth(self, x):

def ffunc(x):
    return x * 3 + 2

print(C().fmeth(0), ffunc(0)

除某些特殊情况外,要求通过 C 实例访问函数没有任何好处。

Python stdlib 几乎没有使用 staticmethod()。除了测试,大概只有20个用途,我查的可以看做特例。 Guido van Rossum 曾表示 staticmethodclassmethod 一起添加是有问题的,不应过多使用。