質問

定への参照方法があるのかどうかのチェック方法は、オブジェクトはありませんか?でもアクセスのインスタンスで行きますか?

役に立ちましたか?

解決

def isbound(method):
    return method.im_self is not None

def instance(bounded_method):
    return bounded_method.im_self

ユーザー定義の方法:

時にユーザ定義メソッドオブジェクト 作成により取得するユーザー定義 関数オブジェクトからのアクセス im_self 属性 None の メソッドオブジェクトと言われるジ.時には取得する ユーザ定義関数オブジェクトから クラスのいずれかを経由してそのインスタンスは、 im_self 属性のインスタンスは、 のメソッドオブジェクトと言われた。いずれの場合も、この新しい方法の im_class 属性クラスから の検索から、 その im_func 属性はオリジナルの 関数オブジェクトです。

Python 2.6 3.0:

インスタンスメソッドオブジェクトには新しい 属性オブジェクトと機能 を構成する方法の代名詞 のための im_self__self__, は、 im_func します。 __func__.旧 名前はまだ対応してPython 2.6がっ3.0です。

他のヒント

Python3に __self__ 属性 のみ セットに行きます。この設定 None 味の機能(税法では、平野の機能をpython3).

のものを使っておけば間違いないようになります:

def is_bound(m):
    return hasattr(m, '__self__')

の選択回答が有効なケースがほとんどです。しかし時に照合する方法がデコレータを選択し解答のチェックに失敗します。次のような例を考えてみましょうデコレータ方法

def my_decorator(*decorator_args, **decorator_kwargs):
    def decorate(f):
        print(hasattr(f, '__self__'))
        @wraps(f)
        def wrap(*args, **kwargs):
            return f(*args, **kwargs)
        return wrap
    return decorate

class test_class(object):
    @my_decorator()
    def test_method(self, *some_params):
        pass

print 文をデコレータは印刷 False.この場合においてその他の方法でチェック機能パラメータを引数名探名 self.こがも ない guarantied仕事を完璧で最初の引数の法な強制する self びその他の名前です。

import inspect

def is_bounded(function):
    params = inspect.signature(function).parameters
    return params.get('self', None) is not None

im_self 属性 (Python2)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top