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可以打印派生类从哪个基类继承特定方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章