首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取子类的重写函数

获取子类的重写函数
EN

Stack Overflow用户
提问于 2019-10-24 12:02:25
回答 3查看 738关注 0票数 19

有没有一种方法可以在Python中获得子类的所有越权函数?

示例:

代码语言:javascript
复制
class A:
    def a1(self):
        pass

    def a2(self):
        pass


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

    def b1(self):
        pass

在这里,我想为类B的对象(或类对象本身)获取一个list B,因为类B只覆盖一个方法,即a2

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-24 12:13:58

您可以用cls.__bases__访问父类,用dir查找父类的所有属性,用vars访问类本身的所有属性。

代码语言:javascript
复制
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)
代码语言:javascript
复制
>>> get_overridden_methods(B)
{'a2'}
票数 18
EN

Stack Overflow用户

发布于 2019-10-24 12:04:31

您可以使用__mro__元组,它持有方法解析顺序。

以你为例:

代码语言:javascript
复制
>>> B.__mro__
( <class '__main__.B'>, <class '__main__.A'>, <class 'object'>) 

因此,您可以遍历这个元组,并检查B方法是否也在其他类中。

票数 3
EN

Stack Overflow用户

发布于 2019-10-24 13:30:46

代码语言:javascript
复制
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***
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58540997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档