ときにメソッドのクラスにアクセスする方法はありますか?あなたが持っているすべては私が同じようなコードを持っている呼び出し可能
f.__dict__
はほとんど助けにはなりませんが、repr(f)
は<bound method Bar.foo of <__main__.Bar object at 0x10c6eec18>>'
となりますが、どうすればよいですか?
ときにメソッドのクラスにアクセスする方法はありますか?あなたが持っているすべては私が同じようなコードを持っている呼び出し可能
f.__dict__
はほとんど助けにはなりませんが、repr(f)
は<bound method Bar.foo of <__main__.Bar object at 0x10c6eec18>>'
となりますが、どうすればよいですか?
各結合方法は
( hereからコピー)この方法は、結合されたインスタンス、または結合方法(約
None
多い__self__
属性を有していますData Model):
インスタンスを介してメソッド(クラスの名前空間で定義された関数) にアクセスすると、特殊なオブジェクト、つまりバインドされたメソッド(インスタンスメソッドとも呼ばれる )オブジェクトが取得されます。 ...バインド方法は二つの特別 を持っている読み取り専用属性:
m.__self__
はメソッド だからf.__self__
はあなたのクラスのインスタンスを取得します...
を操作するオブジェクトです:
print(f.__self__) # <__main__.Foo object at 0x7f766efeee48>
をと
print(type(f.__self__)) # <class '__main__.Foo'>
あなただけを使用したい:type(f.__self__)
またはf.__self__.__class__
はあなたのタイプのオブジェクトを取得しますold-style classesの210。
Nitpick:インスタンスの型は、必ずしも関数が定義されたクラスである必要はありません。メソッドがXインスタンスにバインドされているからといって、クラスYでその関数を定義できないわけではありません。しかし、このコードは実世界のシナリオの99.99%で正しい出力を生成します。そして、とにかくOPの期待される生産量がこのような0.01%のケースでどうなるかははっきりしない。 –