[英]In Python, class from which a given instance is inheriting a particular method
我知道,在Python中,给出一类ClassA
,与
inspect.getmembers(ClassA, predicate=inspect.ismethod)
我可以遍历ClassA
存在的不同方法。 还收集了继承的方法,在我的情况下很方便。 但是我需要的是,给定ClassA
的特定方法method1
,以获取ClassA
继承了method1
的类。 它可能是ClassA
本身,或其任何父母/祖父母。 我以为我可以递归地遍历__bases__
属性,在每一步都寻找method1
属性。 但是也许此功能已经在某处实现。 还有另一种方法吗?
使用inspect.getmro()
(适用于新旧类)浏览MRO(方法解析顺序):
def class_for_method(cls, method):
return next((c for c in inspect.getmro(cls)
if method.__func__ in vars(c).values()), None)
当前没有stdlib方法为您执行此搜索,否。
演示:
>>> import inspect
>>> def class_for_method(cls, method):
... return next((c for c in inspect.getmro(cls)
... if method.__func__ in vars(c).values()), None)
...
>>> class Base1(object):
... def foo(self): pass
...
>>> class Base2(object):
... pass
...
>>> class ClassA(Base1, Base2):
... pass
...
>>> class_for_method(ClassA, ClassA.foo)
<class '__main__.Base1'>
如果找不到基类,则上面的表达式返回None
:
>>> class Bar:
... def spam(): pass
...
>>> class_for_method(ClassA, Bar.spam) is None
True
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.