有没有一种方法可以在Python中获得子类的所有越权函数?
示例:
class A:
def a1(self):
pass
def a2(self):
pass
class B(A):
def a2(self):
pass
def b1(self):
pass在这里,我想为类B的对象(或类对象本身)获取一个list B,因为类B只覆盖一个方法,即a2。
发布于 2019-10-24 12:13:58
您可以用cls.__bases__访问父类,用dir查找父类的所有属性,用vars访问类本身的所有属性。
def get_overridden_methods(cls):
# collect all attributes inherited from parent classes
parent_attrs = set()
for base in cls.__bases__:
parent_attrs.update(dir(base))
# find all methods implemented in the class itself
methods = {name for name, thing in vars(cls).items() if callable(thing)}
# return the intersection of both
return parent_attrs.intersection(methods)>>> get_overridden_methods(B)
{'a2'}发布于 2019-10-24 12:04:31
您可以使用__mro__元组,它持有方法解析顺序。
以你为例:
>>> B.__mro__
( <class '__main__.B'>, <class '__main__.A'>, <class 'object'>) 因此,您可以遍历这个元组,并检查B方法是否也在其他类中。
发布于 2019-10-24 13:30:46
class A:
def a1(self):
pass
def a2(self):
pass
class B(A):
def a2(self):
super().a2()
pass
def b1(self):
pass
obj = B()
obj.a2() # ***first give the output of parent class then child class***https://stackoverflow.com/questions/58540997
复制相似问题