次のコードを持つと、クラス属性に割り当てられていてもバインドされないように 'foo'関数を使って何ができますか? __get__をオーバーライドすることは役に立ちません - インスタンスの__dict__に関数が存在しない場合には使用されないので、私が理解する限り理解します(クラス属性の場合もそうです)。 他に何ができますか?クラス属性に割り当てられていても、Python関数を常にアンバインドにする方法
def foo(x):
print(x)
def foo_get(self, obj, type=None):
return foo
foo.__get__ = foo_get
class A(object):
def __init__(self):
self.f = foo
class B(object):
f = foo
a = A()
print(a.f) #<function foo at 0x2321d10>
print(a.f.__get__(a, A)) #<function foo at 0x2321d10>
b = B()
print(b.f) #<bound method B.foo of <__main__.B object at 0x23224d0>>
なぜあなたはこれをしたいですか? –
私は、元のvergionと猿のパッチを当てたものとの間に違いがないように、猿パッチのbuiltin thread.start_new_threadにそれを必要とします。今では、クラス属性にwait_new_threadを代入すると(ウェイトレスライブラリはそれを行います)、それを使用します。元のバージョンは、いつもタイプ組み込み関数を持っているので動作し、monkey-patchはそれがバインドされても機能しません。 –
しかし 'thread.start_new_thread'はクラスのメソッドではありません。それは '<組み込み関数start_new_thread>'です。置き換えたい場合は 'thread.start_new_thread'に代入し、それに普通の関数を与えるだけです。 –