在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个方法——我必须再次定义每个方法。(实际上我并没有这么做,我只是想知道声明函数的其他方法是什么)。