python - সাবক্লাসের ওভাররাইড ফাংশনগুলি পান




reflection overriding (3)

পাইথনে সাবক্লাসের সমস্ত ওভাররাইডেন ফাংশনগুলি পাওয়ার কি কোনও উপায় আছে?

উদাহরণ:

class A:
    def a1(self):
        pass

    def a2(self):
        pass


class B(A):
    def a2(self):
        pass

    def b1(self):
        pass

এখানে, আমি ক্লাস B এর কোনও বস্তুর (বা শ্রেণীর অবজেক্টের জন্য) নিজের জন্য ["a2"] তালিকা পেতে চাই, যেহেতু ক্লাস B কেবলমাত্র একটি মাত্র পদ্ধতিকে ওভাররাইড করে, যেমন a2


আপনি cls.__bases__ সহ পিতামাতার ক্লাসে অ্যাক্সেস করতে পারেন, পিতা বা মাতার সমস্ত বৈশিষ্ট্য সন্ধান করতে পারেন এবং ক্লাসের সমস্ত বৈশিষ্ট্যই cls.__bases__ সহ অ্যাক্সেস করতে পারেন:

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***




subclass