Skip to main content
 首页 » 编程设计

python之从另一个类借用类方法(Python 3)

2025年05月04日15over140

从另一个类中借用实例方法的实现很简单,但是如何用类方法来实现呢?

class A: 
  def im(self): 
    print(self.__class__.__name__) 
 
  @classmethod 
  def cm(cls): 
    print(cls.__name__) 
 
class B: 
  im = A.im 
  cm = A.cm # line X 
  classmethod(cm) 
 
B().im() # B - OK 
B.cm() # A - not what I want 

我还尝试将 X 行更改为 cm = A.cm.__func__,这导致 TypeError: cm() missing 1 required positional argument: 'cls'

请您参考如下方法:

当您访问 A.cm 时,您调用 classmethod 对象作为 descriptor ,这意味着它已经绑定(bind)到 A 类。再次打开它:

class B: 
    cm = classmethod(A.cm.__func__) 

.__func__ 属性使您可以访问原始函数,因此您可以使用新的 classmethod 调用重新包装它。

或者,使用 A.__dict__ 映射来获取实际的类方法本身,绕过描述符调用:

class B: 
    cm = A.__dict__['cm']