关于python:pdb可以打印派生类从哪个基类继承特定方法

Can pdb print from which base class did the derived class inherit a particular method from

本问题已经有最佳答案,请猛点这里访问。

pdb能否打印派生类从哪个基类继承了特定方法?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pdb
class A():
    def funct(self):
         print 3

class B():
    def funct(self):
         print 6

class C(A, B):
    pass

b = B();
print b.funct()

========================

1
2
3
? python a.py
3
None

======================

1
2
3
python -m pdb a.py
(Pdb) p c.funct
<bound method C.funct of <__main__.C instance at 0x102154440>>

有没有方法从哪个基类中获取派生类C继承了funct方法?


你必须自己灌输。

您可以将下面的截图放到一个实用函数中,但其思想是:从类中检索类,循环访问__mro__属性,并在每个类中检查所需的函数或属性是否在其__dict__上:

1
print(list(cls for cls in b.__class__.__mro__ if"funct" in cls.__dict__))

(你知道"pdb"与此无关——而且python通常可以在交互模式下工作,对吗?PDB只是进入交互模式的一种方式,尽管与ipython等Python shell相比,PDB资源不足。)

另一个注意事项是:我不知道您在做什么,但您确实应该在python 3.x中尝试这样做,而不是在python 2中。