python 如何判断继承的子类重写了某方法

通用方法 

def method_is_overided_in_subclass(method_name: str, sub_class: Any, base_class: Any) -> bool:
    """Define whether subclass override specified method

    Args:
        method_name: to be defined method name
        sub_class: to be defined  sub class
        base_class: to be defined base class
    Returns:
        True or False
    """
    assert issubclass(sub_class, base_class), "class %s is not subclass of class %s" % (
        sub_class,
        base_class,
    )
    this_method = getattr(sub_class, method_name)
    base_method = getattr(base_class, method_name)
    return this_method is not base_method


class A:
  def test_method(self):
    pass


class B(A):
  def test_method(self):
    pass

if __name__ == '__main__':
    print(method_is_overided_in_subclass(method_name="test_method", sub_class=B,base_class=A))

类方法

class BaseClass(object):
    def foo(self):
        return 'foo'
    def bar(self):
        return 'bar'
    def methods_implemented(self):
        """This does work."""
        overriden = []
        for method in ('foo', 'bar'):
            this_method = getattr(self.__class__, method)
            base_method = getattr(BaseClass, method)
            if this_method is not base_method:
                overriden.append(method)
        return overriden

class SubClass(BaseClass):
    def foo(self):
        return 'override foo'
 
o = SubClass()
print(o.methods_implemented())

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值