首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在更改类后动态返回

如何在更改类后动态返回
EN

Stack Overflow用户
提问于 2016-12-12 17:12:33
回答 1查看 52关注 0票数 0

我更改了getitem特殊方法,以便使用python字典实现perl的自动生动特性,如下所示:

代码语言:javascript
复制
class AutoVivification(dict):
        """Implementation of perl's autovivification feature."""

        def __getitem__(self, item):

                try:
                        return dict.__getitem__(self, item)

                except KeyError:
                        value = self[item] = type(self)()
                        return value

这是非常有用的,但是现在我没有找到返回创建对象的字典原始类的方法。第一,是否可能?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-12 18:32:21

下面是关闭该功能的一种方法:

代码语言:javascript
复制
class AutoVivification(dict):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.vivify = True
        self.root = self

    def __getitem__(self, item):
        try:
            return dict.__getitem__(self, item)
        except KeyError:
            if not self.root.vivify:
                raise
            value = self[item] = type(self)()
            value.root = self.root
            return value

    def unvivify(self):
        self.vivify = False

用法:

代码语言:javascript
复制
a = AutoVivification()
a['b']['c'] = 3
print(a)
a.unvivify()
print(a['b']['d'])

输出:

代码语言:javascript
复制
{'b': {'c': 3}}
Traceback (most recent call last):
  File "/Users/alexhall/Dropbox/python/books/sandbox/sandbox.py", line 25, in <module>
    print(a['b']['d'])
  File "/Users/alexhall/Dropbox/python/books/sandbox/sandbox.py", line 9, in __getitem__
    return dict.__getitem__(self, item)
KeyError: 'd'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41106022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档