[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.



답변

을 사용하여 부모 클래스에 액세스하고을 사용하여 부모의 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***


답변