我在Stack Overflow上看到了一堆python方法解析顺序问题,其中许多问题都得到了很好的回答。我有一个不太合适。
当请求super(MyClassName, self).method_name
时,我得到了(单个)父类未返回的类型。将debug放到父类中表明它没有被选中。
我会添加一些代码片段,但是代码库很大。我进入了MyClassName.__mro__
中列出的每个类(它告诉我们方法解析顺序是什么),并且没有一个返回我得到的类型。所以问题是...
我可以使用Python中的哪种工具或属性来找出实际被调用的代码,以便再次发生这种情况时,我可以轻松地找出实际被调用的代码?我最终找到了解决方案,但是我宁愿知道如何以较少的劳动密集型方式来解决它。
最佳答案
您可以使用例如inspect.getmodule
根据其文档:
尝试猜测在哪个模块中定义了对象。
一个简单的示例,使用a.py
:
class Parent(object):
def method(self):
return True
和
b.py
:import inspect
from a import Parent
class Child(Parent):
def method(self):
parent_method = super(Child, self).method # get the parent method
print "inherited method defined in {}".format(
inspect.getmodule(parent_method), # and find out where it came from
)
return parent_method()
if __name__ == '__main__':
Child().method()
运行
b.py
给出结果:Parent defined in <module 'a' from 'C:/Python27\a.py'>