从Python类获取特定的方法子集

时间:2017-03-29 10:10:15

标签: python class inheritance

我已阅读Stack Overflow中回答此问题的其他帖子,但我对特定的方法子集感兴趣。

假设您的课程Cn n大于1,课程C0C1,...,Cn-1等,对于介于1和i之间的每个n-1,类Ci+1继承自班级Ci

我的问题是:对于任何高于1的i,如何获取属于Ci但不属于Ci-1 的方法列表?

1 个答案:

答案 0 :(得分:3)

您可以在类的__dict__ attribute中找到类本身定义的所有名称;您可以使用vars() function更简洁地列出这些内容:

from types import FunctionType

for name, object in vars(Ci).items():
    if isinstance(object, FunctionType):
        print(name, 'is defined on Ci directly and not inherited')

您可能需要更改功能测试;我在这里假设您只需要普通的函数对象(在实例上查找时绑定到方法中),但您可能需要测试类或静态方法或其他可调用对象,具体取决于您的用例。

这将包括已重新定义的名称;所以它们也存在于父但是Ci提供了一个掩盖父母的实现的新实现。

如果您必须找到唯一属于Ci并且没有父级提供的所有名称,则您必须过滤基础上存在的名称:

parent_defined = set().union(*(dir(b) for b in Ci.__bases__))

for name, object in vars(Ci).items():
    if name not in parent_defined and isinstance(object, FunctionType):
        print(name, 'is defined on Ci directly and not inherited')