python - 获取子类的覆盖函数
问题描述
有没有办法在 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'}
推荐阅读
- ruby-on-rails - Rails - 应该在控制器或视图中设置链接文本吗?
- c# - 为什么我无法打开从网上下载的 excel 文件?
- python-3.x - 如何在熊猫中附加两个数据框并将其打印到excel文件中?
- c++ - Visual Studio C++ 编译器尝试编译 CUDA C/C++ 文件
- python - 在 python 中执行 get_dummy 时,每个日期只保留一行
- angular - Angular 自定义手风琴组件在单击时不会展开
- python - 如何在 PyTorch 中编写 scikit-learn 估算器
- pandas - 当我编写这段特定的代码时,我的 jupiter notebook 需要很长时间才能给出任何输出(继续运行)
- ios - Apple doc示例代码中的__block是什么意思?
- laravel - 如何在 laravel 中获取多对多关系数据?