Skip to main content
 首页 » 编程设计

python之装饰父类方法

2025年05月04日19mengfanrong

我想创建一个具有父类方法的子类,该方法在子类中是“类方法”,但在父类中不是。

本质上,我正在努力完成以下任务:

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 已经被转换为方法,第一个参数具有特殊含义。您需要撤消此操作并查看底层函数对象,重新解释“self”的含义。

我还要提醒您,这是一件非常奇怪的事情,因此容易让阅读您代码的任何人感到困惑。您最好考虑针对您的问题采用不同的解决方案。