在python中重定向函数定义
将类方法指向实例方法显然会导致问题:在python中重定向函数定义,python,class-attributes,Python,Class Attributes,将类方法指向实例方法显然会导致问题: 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'] =
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'
我应该在这里做什么呢?
\uuu getitem\uuu
只在类中有效。不能在实例基础上重写它
这项工作:
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']
如果出于某种奇怪的原因想在\uuuu init\uuuu
中定义它,则必须创建一个描述符:
def __init__(self):
self.a = A()
def mygetitem(self, item):
return self.a[item]
B.__getitem__ = types.MethodType(mygetitem, None, B)
\uuuu getitem\uuuu
仅在类中有效。不能在实例基础上重写它
这项工作:
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']
如果出于某种奇怪的原因想在\uuuu init\uuuu
中定义它,则必须创建一个描述符:
def __init__(self):
self.a = A()
def mygetitem(self, item):
return self.a[item]
B.__getitem__ = types.MethodType(mygetitem, None, B)
您是否试图在不使用def的情况下定义方法函数?为什么?def有什么问题?它不是动态的?让我们假设,除了getitem,我还有另外20个方法——我必须再次定义每个方法。(实际上我并没有这么做,我只是想知道其他声明函数的方法是什么。)您是否试图在不使用def的情况下定义方法函数?为什么?def有什么问题?它不是动态的?让我们假设,除了getitem,我还有另外20个方法——我必须再次定义每个方法。(实际上我并没有这么做,我只是想知道声明函数的其他方法是什么)。