python:什么时候使用静态方法而不是 class 方法?
python: When to use static method over class method?
根据我的阅读,class 方法与静态方法基本相同,但有一些例外,但具有提供 class 指针的优点。
因此,如果在 class 中定义了非实例方法,是否真的有理由使用静态方法而不是 class 方法?
编辑:因为你们中的一些人很快就会将其视为与另一个问题的重复而忽略。这不是关于 class 和静态方法之间区别的问题。而是在绝大多数情况下两者功能重叠时如何取舍的问题。
编辑#2:我问的原因是我正在重构其他人的一些现有代码。具体来说,有子 classes 与父共享相同的模块,我打算将它们移动到单独的模块。当发生这种情况时,需要修复静态方法中对超出 class 常量的引用。我可以通过以下方式之一完成
1.从父模块导入所有常量
2.将所有常量移动到父class内,并将所有子静态方法更改为class方法
3.在每次引用常量
之前添加"ParentClass."
我个人想做#2,因为它避免了命名空间污染,这也是我问这个问题的原因。这主要是风格问题。希望这提供了足够的上下文。
实际上,几乎总是如此。您很少需要访问自动传递给 class 方法的 class 对象。 Python class 方法(不应与 Java 等语言中的 class 方法进行比较)主要用于提供备用构造函数。
具体来说,class 方法类似于
@classmethod
def my_class_method(cls, foo):
...
如果您从未真正在方法主体中使用 cls
,您可以先将其更改为
@staticmethod
def my_static_method(foo):
...
接下来,您可能会考虑 my_static_method
是否真的需要成为 class 的一部分,以及它是否可以作为一个独立的函数。
如果你做使用cls
,那么显然它需要是class方法。
根据我的阅读,class 方法与静态方法基本相同,但有一些例外,但具有提供 class 指针的优点。
因此,如果在 class 中定义了非实例方法,是否真的有理由使用静态方法而不是 class 方法?
编辑:因为你们中的一些人很快就会将其视为与另一个问题的重复而忽略。这不是关于 class 和静态方法之间区别的问题。而是在绝大多数情况下两者功能重叠时如何取舍的问题。
编辑#2:我问的原因是我正在重构其他人的一些现有代码。具体来说,有子 classes 与父共享相同的模块,我打算将它们移动到单独的模块。当发生这种情况时,需要修复静态方法中对超出 class 常量的引用。我可以通过以下方式之一完成 1.从父模块导入所有常量 2.将所有常量移动到父class内,并将所有子静态方法更改为class方法 3.在每次引用常量
之前添加"ParentClass."我个人想做#2,因为它避免了命名空间污染,这也是我问这个问题的原因。这主要是风格问题。希望这提供了足够的上下文。
实际上,几乎总是如此。您很少需要访问自动传递给 class 方法的 class 对象。 Python class 方法(不应与 Java 等语言中的 class 方法进行比较)主要用于提供备用构造函数。
具体来说,class 方法类似于
@classmethod
def my_class_method(cls, foo):
...
如果您从未真正在方法主体中使用 cls
,您可以先将其更改为
@staticmethod
def my_static_method(foo):
...
接下来,您可能会考虑 my_static_method
是否真的需要成为 class 的一部分,以及它是否可以作为一个独立的函数。
如果你做使用cls
,那么显然它需要是class方法。