我想制作一个具有父类方法的子类,其中该方法是子类中的“类方法”,而不是父类中的“类方法”。

本质上,我正在尝试完成以下任务:

class foo(Object):
    def meth1(self, val):
        self.value = val

class bar(foo):
    meth1 = classmethod(foo.meth1)

最佳答案

我也不完全确定您想要的确切行为是什么,但是假设您希望bar.meth1(42)等同于foo.meth1是bar的类方法(“ self”是类),然后您可以使用以下方法实现此目的:

def convert_to_classmethod(method):
    return classmethod(method.im_func)

class bar(foo):
    meth1 = convert_to_classmethod(foo.meth1)


classmethod(foo.meth1)的问题在于foo.meth1已被转换为方法,对第一个参数具有特殊含义。您需要撤消该操作,然后查看底层的函数对象,重新解释“自我”的含义。

我还要提醒您,这是一件很奇怪的事情,因此容易使任何阅读您代码的人感到困惑。您可能最好考虑通过其他解决方案来解决问题。

10-06 13:51