python - उपवर्ग के अधिरोहित कार्य करें




reflection overriding (3)

आप 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'}

क्या पायथन में एक उपवर्ग के सभी ओवरराइड कार्यों को प्राप्त करने का एक तरीका है?

उदाहरण:

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


आप __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***




subclass