将staticmethod应用于所有类方法的任何方法



是否有任何方法可以将staticmethod应用于给定类的所有方法。

我想我们可以访问它的元类中的方法(在元类的new中)并应用静态方法,但我不知道语法。有人能解释一下吗?

如果没有一个方法共享任何状态,那么根本没有理由拥有一个类。一个有功能的模块可能是一个更好的想法。。。

虽然模块(如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()循环对象上的方法,然后用原始(未绑定)函数的staticmethod()覆盖函数。

请注意,我会在一个类上使用一个模块来实现这一点,而且可能只是在每个函数上手动调用@staticmethod,而不是这样做(例如,因为这会破坏编辑器的检查)。给出这个答案是为了表明这是可能的,因为这是一个非常简单的实现。

mgilson的答案是最好的,但要添加另一种通常用于将类定义为命名空间的模式,您还可以实例化类,覆盖类名:

class Test:
    def a_static_method(self, arg1, srg2):
        pass
Test = Test()

不过,请注意,在此之后,Test实际上是一个类实例,根据您的使用方式,这可能会产生误导

相关内容

最新更新