【问题标题】:Can pdb print from which base class did the derived class inherit a particular method from [duplicate]pdb可以打印派生类从哪个基类继承特定方法[重复]
【发布时间】: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 中检查的所有内容都可以在没有它的情况下进行检查。它不会使大多数内省模式有任何不同。

标签: python 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 中。

【讨论】:

    猜你喜欢
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 2016-07-03
    • 1970-01-01
    相关资源
    最近更新 更多