首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >self[identifier] = some_value在这段代码中做什么?

self[identifier] = some_value在这段代码中做什么?
EN

Stack Overflow用户
提问于 2016-08-04 03:33:23
回答 2查看 195关注 0票数 6

我只是想学习用Python语言实现K-ary树,偶然发现了这个链接:http://www.quesucede.com/page/show/id/python-3-tree-implementation

在tree.py文件中,有一段代码如下所示:

代码语言:javascript
运行
复制
class Tree:

    def __init__(self):
        self.__nodes = {}

    @property
    def nodes(self):
        return self.__nodes

    def add_node(self, identifier, parent=None):
        node = Node(identifier)
        self[identifier] = node

        if parent is not None:
            self[parent].add_child(identifier)

        return node

    # ... ...

    def __getitem__(self, key):
        return self.__nodes[key]

    def __setitem__(self, key, item):
        self.__nodes[key] = item

什么是self[identifier]?这是一个列表吗?这真的很让人困惑。有人能给我解释和/或给我介绍一些使用self作为列表的文档吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-04 03:38:24

在完整的示例代码中,这是重要的一点:

代码语言:javascript
运行
复制
def __getitem__(self, key):
    return self.__nodes[key]

def __setitem__(self, key, item):
    self.__nodes[key] = item

这两个“神奇方法”,__getitem____setitem__,允许使用foo[key]语法像访问列表或字典一样访问类。

因此,在您的示例中,如果foo是一个Tree实例,foo["a"] = "b"将执行__setitem__,其中key作为"a"item作为"b",因此将key映射到<代码>D14字典中的<代码>D13。

票数 3
EN

Stack Overflow用户

发布于 2016-08-04 03:58:21

他们正在使用__getitem__的魔术方法。此方法在类中使用,以允许其实例使用indexer运算符进行列表索引、字典查找或访问值范围。

在休眠示例中,我们有一个列表,其中包含一些额外的功能,如头部和尾部。取自here的示例

代码语言:javascript
运行
复制
class FunctionalList:
    '''A class wrapping a list with some extra functional magic, like head,
    tail, init, last, drop, and take.'''

    def __init__(self, values=None):
        if values is None:
            self.values = []
        else:
            self.values = values

    def __len__(self):
        return len(self.values)

    def __getitem__(self, key):
        # if key is of invalid type or value, the list values will raise the error
        return self.values[key]

    def __setitem__(self, key, value):
        self.values[key] = value

    def __delitem__(self, key):
        del self.values[key]

    def __iter__(self):
        return iter(self.values)

    def __reversed__(self):
        return FunctionalList(reversed(self.values))

    def append(self, value):
        self.values.append(value)
    def head(self):
        # get the first element
        return self.values[0]
    def tail(self):
        # get all elements after the first
        return self.values[1:]
    def init(self):
        # get elements up to the last
        return self.values[:-1]
    def last(self):
        # get last element
        return self.values[-1]
    def drop(self, n):
        # get all elements except first n
        return self.values[n:]
    def take(self, n):
        # get first n elements
        return self.values[:n]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38752193

复制
相关文章

相似问题

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