我想制作一个具有父类方法的子类,其中该方法是子类中的“类方法”,而不是父类中的“类方法”。
本质上,我正在尝试完成以下任务:
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已被转换为方法,对第一个参数具有特殊含义。您需要撤消该操作,然后查看底层的函数对象,重新解释“自我”的含义。
我还要提醒您,这是一件很奇怪的事情,因此容易使任何阅读您代码的人感到困惑。您可能最好考虑通过其他解决方案来解决问题。