对于任何类,您都可以通过属性 __mro__
告诉(非虚拟)父类(super class),并通过调用 __subclasses__
告诉(非虚拟)子类。
对于任何 ABC,您可以通过属性 _abc_registry
告诉所有虚拟子类。
有没有办法告诉一个类的所有虚拟父类(super class),即它注册为虚拟子类的所有类?
最佳答案
For any ABC you can tell all virtual subclasses via the attribute '_abc_registry'.
不,你不能。您只能通过这种方式找到显式注册的虚拟子类。由 __subclasshook__
处理的任何内容都不会显示在您的支票中。
要完成您想要做的事情,您必须遍历 Python session 中定义的每个 ABC 并调用 isinstance
。虽然这在 CPython 中通过使用 __subclasses__ 方法遍历类型层次结构在技术上是可行的,但这可能是一个坏主意。
关于Python:如何枚举类的虚拟父类(super class)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37665304/