我已阅读Stack Overflow中回答此问题的其他帖子,但我对特定的方法子集感兴趣。
假设您的课程Cn
n
大于1,课程C0
,C1
,...,Cn-1
等,对于介于1和i
之间的每个n-1
,类Ci+1
继承自班级Ci
。
我的问题是:对于任何高于1的i
,如何获取属于Ci
但不属于Ci-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')