当前位置:  开发笔记 > 编程语言 > 正文

重定向python中的函数定义

如何解决《重定向python中的函数定义》经验,为你挑选了1个好方法。

在实例方法中指向类方法显然会导致问题:

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'

我应该在这做什么呢?



1> nosklo..:

__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)

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有