有没有办法将静态方法应用于给定类的所有方法。
我在想我们可以访问其元类中的方法(在新的元类中)并应用静态方法,但我不知道语法。任何人都可以阐明这一点吗?
有没有办法将静态方法应用于给定类的所有方法。
我在想我们可以访问其元类中的方法(在新的元类中)并应用静态方法,但我不知道语法。任何人都可以阐明这一点吗?
如果没有一个方法共享任何状态,那么根本没有理由拥有一个类。具有功能的模块可能是一个更好的主意...
虽然模块(如 mgilson 所建议的)是一个更好的选择,但如果您真的对此有很好的用途(我想不出一个),那么使用模块inspect
和类装饰器相对容易:
import inspect
def staticmethods(cls):
for name, method in inspect.getmembers(cls, inspect.ismethod):
setattr(cls, name, staticmethod(method.__func__))
return cls
@staticmethods
class Test:
def test():
print("Test")
Test.test()
类装饰器所做的就是用 循环遍历对象上的方法,然后用原始(未绑定)函数的inspect.getmembers()
a 覆盖该函数。staticmethod()
请注意,我会为此使用一个模块而不是一个类,并且可能也只是手动调用@staticmethod
每个函数而不是这样做(例如,这会破坏我的编辑器的检查)。给出这个答案是为了表明它是可能的,因为它是一个非常简单的实现。
mgilson 的答案是最好的,但要添加另一种通常用于将类定义为命名空间的模式,您还可以实例化该类,覆盖类名:
class Test:
def a_static_method(self, arg1, srg2):
pass
Test = Test()
但是请注意,这Test
实际上是一个类实例,这可能会产生误导,具体取决于您使用它的方式。