【发布时间】:2022-01-07 15:28:11
【问题描述】:
问题
我有一些方法,我想直接在一个类之外使用它们,并将它们分组到一些不同的类中。
如何在类定义之外定义方法已经得到正确回答:
但是,我没有发现任何关于静态方法的信息。
最好的方法是什么?
我的方法
对于这样的类:
class some_class:
@staticmethod
def some_haevy_method(...):
...
我尝试了以下方法:
装饰器
def some_haevy_method(...):
...
class some_class:
@staticmethod
some_haevy_method = some_haevy_method
无法编译:SyntaxError: invalid syntax
更换
def some_haevy_method(...):
...
class some_class:
@staticmethod
def some_haevy_method(...):
pass
some_haevy_method = some_haevy_method
错误:some_haevy_method () takes 0 positional arguments but 1 was given(装饰器被覆盖,self 被传递)
重新定义
def some_haevy_method(...):
...
class some_class:
@staticmethod
def some_haevy_method(*args, **kwargs):
return some_haevy_method(*args, **kwargs)
这确实有效,但缺点是文档和类型提示不可用。
我的用例
编辑:因为它是在 cmets 中询问的。
我想直接在脚本中使用我的some_haevy_method,甚至不知道类。
它也会出现在某些类中。这个班有孩子,孩子们有其他孩子。他们每个人都应该能够提供这个功能。
这可能是有点懒惰的编码,因为在这个例子中我的类是更多的主题分组方法,但它对我的项目有帮助。比如我在调试的时候,不用每次都加载具体的方法。
请随意在 cmets 中烤我 :)
【问题讨论】:
-
如果你已经有了全局函数,那么定义静态方法似乎完全没有必要。
-
为什么要在类之外有一个静态函数?
-
@chepner:我想通过类使用它,而不是每次都重新加载特定的函数。我将更新一些示例用法。
-
@Robert 为什么不呢?这个特定的方法可以在不知道类的情况下从其他模块中使用。
-
没有重新加载。任何你会使用
some_class.some_heavy_method的地方,你都可以很容易地使用some_heavy_method。静态方法的实际用例相当少见。
标签: python