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