私の質問はこれと似ています。モジュールの内容ではなく、オブジェクトのメソッドに関するものです。inspect
モジュールを使用して、親ではなく、質問しているクラスでのみ定義されたメソッドを取得できるかどうかを知りたいです。
これが必要なのは、子クラスが「マクロ」メソッドを定義しているためです。これは、より高いレベルの抽象化で親のメソッドにアクセスし、ユーザーが継承のすべての方法で定義された低レベルのメソッドについて心配する必要がないようにしたいためです木。
簡単な例を次に示します。
class Foo(object):
def __init__(self): pass
def f1(self): return 3
def f2(self): return 1
class Bar(Foo):
def __init__(self): Foo.__init__(self)
def g1(self): return self.f1() + self.f2()
def g2(self): return self.f1() - self.f2()
import inspect
inspect.getmembers(Bar, inspect.ismethod)
出力:
[('__init__', <unbound method Bar.__init__>),
('f1', <unbound method Bar.f1>),
('f2', <unbound method Bar.f2>),
('g1', <unbound method Bar.g1>),
('g2', <unbound method Bar.g2>)]
f
ユーザーはs にしか興味がないので、 s の存在を知ったり気にしたりする必要はありませんg
。(もちろん、これらのメソッドはすべて、オブジェクトがインスタンス化されるときにオブジェクトにバインドされるため、この出力はほとんどのコンテキストで意味があります。) 長い継承ツリーの場合、返されるリストは非常に長くなり、継承されていないものでいっぱいになる可能性があります。ユーザーには関係ありません。
このリストを離れf1
たり外したりするにはどうすればよいですか? クラスで定義されたメソッドf2
の属性に相当するものはありますか? さらに良いことに、インスタンスメソッド__module__
で同じことを行うことは可能ですか?