2011-10-06 94 views
1

我在读'潜入Python',下面的例子给出了每一行的解释,但我仍然无法解释意义。有人可以在数字1和2上多说一些吗?当它开始说明这个包装类的基本技术时,我不明白#1 ...等等。#2我完全不理解它。请协助和教育。UserDict普通方法说明

例5.10。 UserDict正常方法

def clear(self): self.data.clear() ❶ 
def copy(self): ❷ 
if self.__class__ is UserDict: ❸ 
return UserDict(self.data) 
import copy ❹ 
return copy.copy(self) 
def keys(self): return self.data.keys() ❺ 
def items(self): return self.data.items() 
def values(self): return self.data.values() 

❶clear是一个普通的类方法;它是公开可供任何人随时调用的。注意 明确,像所有的类方法,有自己作为第一个参数。 (请记住,当您调用方法时,不包含 self;它是Python为您添加的东西。)还要注意此包装类的基本技巧 :将实际字典(数据)存储为数据属性,定义全部实际字典所具有的方法,并将每个类方法重定向到实际字典上的相应方法。 (如果您忘记了,字典的清除方法将删除其所有密钥及其关联的值。) ❷真实字典的复制方法返回与原始 (完全相同键值对)。但是UserDict不能简单地重定向到self.data.copy,因为 方法返回一个真正的字典,并且你想要的是返回一个与自己相同的类 的新实例。

回答

0

至于点1.它只是回忆的包装类的基本知识......恕我直言明确方法的文档块是不是真的回想起这些基本知识的最佳场所....

由于。当调用对象的复制方法时,您的目标是复制您的实例,而不是实例中的数据存储(上例中的'self.data')

self.data.copy复制数据存储:您仍然没有您的UserDict实例的副本...

但我不知道代码中是否没有错误摘录:“return UserDict(sel f.data)“ - >这会在数据存储的SAME上创建新实例? 如果我没有错,这将是正确的调用“返回UserDict(self.data.copy())”....