2017-10-25 12 views
0

派生クラスが特定のメソッドを継承した基本クラスのpdbを出力できますか?派生クラスがどの基本クラスから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メソッドを継承しましたか?

+0

実際、pdbはこれとは関係ありません。任意のコンテキストで同じ方法でPythonオブジェクトをイントロスペクトできます。すべてのpdbは(ほとんどの場合)あなたを獲得し、コールスタックを上下に移動するだけでなく、ブレークポイントを設定する簡単な方法です。しかし、pdbで検査することができるものはすべて、検査なしで検査することもできます。それはほとんどのイントロスペクションパターンを異なるものにしません。 – Iguananaut

答えて

1

あなたは自分でそれを調べる必要があります。

ユーティリティ関数では、次のように記述することができます。クラスからクラスを取り出し、__mro__属性を反復処理し、各クラスで目的の関数または属性が__dict__

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

(あなたは「PDB」はそれとは何の関係もありません知っている - 、Pythonは通常、対話型モードで動作することができ、右PDBがinteracitiveモードに入るのひとつの方法である、との1はいえ? ipythonのようなPythonシェルと比べるとリソースが不足している)

あなたが何をしているのか分からないが、実際にはPython 2.xではなく、Python 3.xでそれをしようとしているはずです。

関連する問題