繁体   English   中英

在Python中,给定实例从其继承特定方法的类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM