を交換し、私はそれに次の2行を含むコードがあります: - どのようにそれは「新しい」モジュールを使用せずに「新しい」モジュール
instanceMethod = new.instancemethod(testFunc, None, TestCase)
setattr(TestCase, testName, instanceMethod)
を書き換えることができましたか?確かに、新しいスタイルのクラスではこれに対処する方法がいくつか用意されていますが、どうすればよいか分かりません。
を交換し、私はそれに次の2行を含むコードがあります: - どのようにそれは「新しい」モジュールを使用せずに「新しい」モジュール
instanceMethod = new.instancemethod(testFunc, None, TestCase)
setattr(TestCase, testName, instanceMethod)
を書き換えることができましたか?確かに、新しいスタイルのクラスではこれに対処する方法がいくつか用意されていますが、どうすればよいか分かりません。
これをチェックしてくださいthread(更新:元のサイトは削除されました)。
Python 3ではこれは必須ではないという議論があります。鉱山など、一人一人の利益のために質問を改めて表明
>>> class C: pass
...
>>> c=C()
>>> def f(self): pass
...
>>> c.f = f.__get__(c, C)
>>> c.f
<bound method C.f of <__main__.C instance at 0x10042efc8>>
>>> c.f
<unbound method C.f>
>>>
、:Pythonの2.6で同じ作品
参照
。Python3でnew.instancemethodの代わりがありますか?つまり、任意のインスタンス(そのクラスではない)が与えられれば、メソッドとして適切に定義された新しい関数をどのように追加できますか?
ので十分です以下:
TestCase.testFunc = testFunc.__get__(None, TestCase)
なぜ 'c.f'の値が、' <__ main __。C instance in 0x10042efc8 >> >>のバインドメソッドC.fから対話シェルの2回目のアクセスで '
これは、同じことをするでしょう。
>>> Testcase.testName = testFunc
うん、それは本当に簡単です。
>>> instanceMethod = new.instancemethod(testFunc, None, TestCase)
あなたのラインは(ではないが、理論的には)NOOP、実際にです。 :)あなただけのようにも実際には
>>> instanceMethod = testFunc
を行うことができ、Pythonの3で、私はそれは同様に、理論的には同じになるかなり確信しているが、新しいモジュールがそのように消えて、私はそれをテストすることはできません練習。
Python v2.4からnew.instancemthod()を使用する必要がないことを確認するには、インスタンスメソッドを置き換える方法の例を次に示します。記述子を使用する必要はありません(たとえ動作しても)。
class Ham(object):
def spam(self):
pass
h = Ham()
def fake_spam():
h._spam = True
h.spam = fake_spam
h.spam()
# h._spam should be True now.
単体テスト用ハンディ。
あなたが「types.MethodType」で「new.instancemethod」を置き換えることができます。
以前の私は壊れたリンクへの参照を見つけることができませんでしたが、ここではそれがあるとコメントしfrom types import MethodType as instancemethod
class Foo:
def __init__(self):
print 'I am ', id(self)
def bar(self):
print 'hi', id(self)
foo = Foo() # prints 'I am <instance id>'
mm = instancemethod(bar, foo) # automatically uses foo.__class__
mm() # prints 'I have been bound to <same instance id>'
foo.mm # traceback because no 'field' created in foo to hold ref to mm
foo.mm = mm # create ref to bound method in foo
foo.mm() # prints 'I have been bound to <same instance id>'
: ます。http://をpython.6.n6.nabble.com/replacement-for-new-instancemethod-in-Python3-tt1546046.html#none 多くの情報は含まれていませんが、間違っている可能性があります。 – geertjanvdk
申し訳ありませんが、それは私の部分で間違っていた。もう一度投票しました! – geertjanvdk