私はinfer_class
関数を実装しようとしていますが、メソッドがあれば、そのメソッドが属するクラスを把握しています。私はこれを達成する方法を考え出すことができませんでしたので、それに@ staticmethod-Sには機能しません@staticmethodが属するクラスを推論するにはどうすればよいですか?
import inspect
def infer_class(f):
if inspect.ismethod(f):
return f.im_self if f.im_class == type else f.im_class
# elif ... what about staticmethod-s?
else:
raise TypeError("Can't infer the class of %r" % f)
:
これまでのところ、私はこのようなものを持っています。
提案がありますか?
ここでのアクションでinfer_class
です:
>>> class Wolf(object):
... @classmethod
... def huff(cls, a, b, c):
... pass
... def snarl(self):
... pass
... @staticmethod
... def puff(k,l, m):
... pass
...
>>> print infer_class(Wolf.huff)
<class '__main__.Wolf'>
>>> print infer_class(Wolf().huff)
<class '__main__.Wolf'>
>>> print infer_class(Wolf.snarl)
<class '__main__.Wolf'>
>>> print infer_class(Wolf().snarl)
<class '__main__.Wolf'>
>>> print infer_class(Wolf.puff)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 6, in infer_class
TypeError: Can't infer the class of <function puff at ...>
あなたがソースを持って、あなたは親クラスを読み込むことができます。なぜこれが必要ですか?あなたは何を達成しようとしていますか? –
関数やメソッドを一時的にスタブする関数を書くことを考えたとします(テスト目的のために、呼び出しを傍受するなど)。これを行うには、関数を含むオブジェクトと関数名の2つの要素が必要です。つまり、 'setattr(obj、func_name、my_stub)'を実行することができます。もしfがモジュールレベルの関数なら、私は 'inspect.getmodule(f)'を使ってオブジェクトを取得し、 'f .__ name__'を使ってその名前を取得します。クラスメソッドとインスタンスメソッドについては、上記のコードを使用します。静的メソッドの場合、私は運が尽きていると思われます。 –