通用方法
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())