我只是想在Python中学习K-ary树实现并且遇到了这个链接:http: //www.quesucede.com/page/show/id/python-3-tree-implementation
在tree.py文件中,有一段代码如下:
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
Run Code Online (Sandbox Code Playgroud)
什么是self[identifier]?这是一个清单吗?这真令人困惑.有人可以解释和/或指出一些使用self作为列表的文档吗?
在完整的示例代码中,这是重要的一点:
def __getitem__(self, key):
return self.__nodes[key]
def __setitem__(self, key, item):
self.__nodes[key] = item
Run Code Online (Sandbox Code Playgroud)
这两个“神奇方法”__getitem__和__setitem__允许使用语法像列表或字典一样访问类foo[key]。
因此,在您的情况下, iffoo是一个Tree实例,foo["a"] = "b"将__setitem__使用keyas"a"和itemas执行"b",从而映射key到字典item中self.__nodes。