python:什么时候使用静态方法而不是类方法?

时间:2015-04-13 20:53:07

标签: python static-methods class-method

根据我读到的内容,类方法与静态方法大致相同,只有少数例外但具有提供类指针的优点。

因此,如果在类中定义了非实例方法,是否真的有理由在类方法上使用静态方法?

编辑:由于你们中的一些人很快将其视为与另一个问题的重复。这不是关于类和静态方法之间差异的问题。相反,这是一个关于如何在绝大多数情况下在功能重叠时决定两者之间的问题。

编辑#2:我问的原因是我正在重构其他人的一些现有代码。具体来说,有一些子类与父项共享相同的模块,我打算将它们移动到单独的模块中。发生这种情况时,需要修复静态方法中对类外常量的引用。我可以通过以下方式之一来实现这一目标  1.从父模块导入所有常量  2.将所有常量移到父类中,并将所有子静态方法更改为类方法  3.添加" ParentClass。"在每次引用常量之前

我个人想做#2,因为它避免了命名空间污染,这也是我问这个问题的原因。这主要是风格问题。希望这能提供足够的背景。

1 个答案:

答案 0 :(得分:6)

实际上,几乎总是如此。您很少需要访问自动传递给类方法的类对象。 Python类方法(不应与Java之类的语言中的类方法进行比较)主要用于提供替代构造函数。

具体来说,类方法看起来像

@classmethod
def my_class_method(cls, foo):
   ...

如果您从未在方法正文中使用cls,则可能先将其更改为

@staticmethod
def my_static_method(foo):
   ...

接下来,您可能会考虑my_static_method是否真的需要成为该类的一部分,以及它是否可以是一个独立的函数。

如果你使用cls,那么显然它需要是一个类方法。