use*_*155 3 python static-methods class-method
根据我读到的内容,类方法与静态方法大致相同,只有少数例外但具有提供类指针的优点.
因此,如果在类中定义了非实例方法,是否真的有理由在类方法上使用静态方法?
编辑:由于你们中的一些人很快将其视为与另一个问题的重复.这不是关于类和静态方法之间差异的问题.相反,在绝大多数情况下,当它们的功能重叠时,如何在两者之间做出决定是一个问题.
编辑#2:我问的原因是我正在重构其他人的一些现有代码.具体来说,有些子类与父级共享相同的模块,我打算将它们移动到单独的模块中.发生这种情况时,需要修复静态方法中对类外常量的引用.我可以通过以下方式之一完成此操作1.从父模块导入所有常量2.将所有常量移动到父类中,并将所有子静态方法更改为类方法3.添加"ParentClass".在每次引用常量之前
我个人想做#2,因为它避免了命名空间污染,这也是我问这个问题的原因.这主要是风格问题.希望这提供了足够的背景.
实际上,几乎总是如此.您很少需要访问自动传递给类方法的类对象.Python类方法(不应与Java之类的语言中的类方法进行比较)主要用于提供备用构造函数.
具体来说,类方法看起来像
@classmethod
def my_class_method(cls, foo):
...
Run Code Online (Sandbox Code Playgroud)
如果您从未实际使用cls过该方法的主体,则可以先将其更改为
@staticmethod
def my_static_method(foo):
...
Run Code Online (Sandbox Code Playgroud)
接下来,您可以考虑是否my_static_method实际需要成为类的一部分,以及它是否可以是独立函数.
如果你不使用cls,那么显然它需要一个类的方法.
| 归档时间: |
|
| 查看次数: |
3003 次 |
| 最近记录: |