1

有没有办法将静态方法应用于给定类的所有方法。

我在想我们可以访问其元类中的方法(在的元类中)并应用静态方法,但我不知道语法。任何人都可以阐明这一点吗?

4

3 回答 3

4

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

于 2013-02-15T16:20:43.803 回答
3

虽然模块(如 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每个函数而不是这样做(例如,这会破坏我的编辑器的检查)。给出这个答案是为了表明它是可能的,因为它是一个非常简单的实现。

于 2013-02-15T16:24:45.677 回答
1

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

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

Test = Test()

但是请注意,这Test实际上是一个类实例,这可能会产生误导,具体取决于您使用它的方式。

于 2013-02-15T16:41:56.210 回答