簽名
def __get__(self, obj, objtype=None):
是說,objtype
是一個可選參數。如果__get__
在調用時只使用一個參數,然後objtype
將被設置爲None
。
例如,富可通過界定foo.baz
這樣竊取從酒吧的方法:
class Foo(object):
pass
class Bar(object):
def baz(self):
print('Hi')
foo = Foo()
foo.baz = Bar.baz.__get__(foo)
print(foo.__dict__)
# {'baz': <bound method ?.baz of <__main__.Foo object at 0xb787006c>>}
foo.baz()
# Hi
如果相反,已經使用的__get__
2個參數的形式,
foo.baz = Bar.baz.__get__(foo, foo.__class__)
then foo.baz
是未綁定方法Bar.baz
和foo.baz()
提高小號
TypeError: unbound method baz() must be called with Bar instance as first argument (got nothing instead)
注意,在Python3的unbound method
概念已被刪除。沒有更多的檢查來看到調用obj的類是正確的類型。因此在Python3中, 用於定義foo.baz
的1參數和2參數形式均適用。
重新編輯也許這會從引導件的相關部分中獲益在問題...要清楚這要求從「我怎麼使用__get__」不同的事情「... –