pdb可以打印派生类从哪个基类继承特定方法[重复]

Posted

技术标签:

【中文标题】pdb可以打印派生类从哪个基类继承特定方法[重复]【英文标题】:Can pdb print from which base class did the derived class inherit a particular method from [duplicate] 【发布时间】:2018-04-07 04:30:42 【问题描述】:

pdb 可以打印派生类从哪个基类继承了特定方法吗?

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()

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

☺ python a.py
3
None

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

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

有没有办法得到从哪个基类,派生类C继承了funct方法?

【问题讨论】:

其实pdb跟这个没什么关系。您可以在任何上下文中以相同的方式内省 Python 对象。所有 pdb 都能让您(在大多数情况下),是一种在调用堆栈上上下移动以及设置断点的简单方法。但是您可以在 pdb 中检查的所有内容都可以在没有它的情况下进行检查。它不会使大多数内省模式有任何不同。 【参考方案1】:

你必须自己内省。

您可以将截断的波纹管放在实用程序函数中,但想法是:从类中检索类,迭代 __mro__ 属性,并在每个类中检查所需的函数或属性是否打开它的__dict__:

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

(您知道“pdb”与此无关 - Python 通常可以在交互模式下工作,对吧?PDB 只是进入交互模式的一种方式,尽管与 Python 相比资源较差像 ipython 这样的 shell。)

第二个说明:我不知道您在做什么,但您确实应该尝试在 Python 3.x 中这样做,而不是在 Python 2 中。

【讨论】:

以上是关于pdb可以打印派生类从哪个基类继承特定方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C++ 多重继承

类的继承与派生

大型程序的工具——多重继承与虚继承

<继承问题>可以把基类对象赋值给子类对象么?

Python 03

继承知识总结