파이썬에서 서브 클래스의 모든 재정의 함수를 얻는 방법이 있습니까?
예:
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
.
답변
을 사용하여 부모 클래스에 액세스하고을 사용하여 부모의 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'}
답변
__mro__
메소드 해결 순서를 보유하는 튜플 을 사용할 수 있습니다 .
예를 들어 :
>>> B.__mro__
( <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)
따라서 해당 튜플을 반복하고 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***