[英]Redirecting function definitions in python
將類方法指向實例方法顯然會引起問題:
class A(dict):
def __getitem__(self, name):
return dict.__getitem__(self, name)
class B(object):
def __init__(self):
self.a = A()
B.__getitem__ = self.a.__getitem__
b1 = B()
b1.a['a'] = 5
b2 = B()
b2.a['b'] = 10
c = b1['a']
d = b2['b']
給出此錯誤:
File ... in __getitem__
return dict.__getitem__(self, name)
KeyError: 'a'
我應該在這里做什么?
__getitem__
僅適用於該類。 您不能在實例基礎上覆蓋它。
這有效:
class A(dict):
def __getitem__(self, name):
return dict.__getitem__(self, name)
class B(object):
def __init__(self):
self.a = A()
def __getitem__(self, item):
return self.a[item]
b1 = B()
b1.a['a'] = 5
b2 = B()
b2.a['b'] = 10
c = b1['a']
d = b2['b']
如果出於某種奇怪的原因要在__init__
定義它,則必須創建一個描述符:
def __init__(self):
self.a = A()
def mygetitem(self, item):
return self.a[item]
B.__getitem__ = types.MethodType(mygetitem, None, B)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.