有没有办法在Python中获取子类的所有替代函数?
例:
class A:
def a1(self):
pass
def a2(self):
pass
class B(A):
def a2(self):
pass
def b1(self):
pass
在这里,我想获得一个列表["a2"]
的类的对象B
(或类对象本身),因为类B
重写只有一个方法,即a2
。
有没有办法在Python中获取子类的所有替代函数?
例:
class A:
def a1(self):
pass
def a2(self):
pass
class B(A):
def a2(self):
pass
def b1(self):
pass
在这里,我想获得一个列表["a2"]
的类的对象B
(或类对象本身),因为类B
重写只有一个方法,即a2
。
Answers:
您可以使用访问父类,使用查看父类的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'}
parent_attrs
如果需要,请在一行中:parent_attrs = {a for b in cls.__bases__ for a in dir(b)}
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***
A
,B
不能修改。OP想要知道B
的方法中的哪一个覆盖了A
的方法之一。
vars
是我想念的东西。非常感谢您(快速)的答复!