我正在阅读'潜入Python',下面的例子给出了每行的解释,但我仍然无法解释其含义。有人可以更多地了解1号和2号。当它开始说明这个包装类的基本技术时,我不明白#1 ......等等......#2我根本不理解它。请协助和教育。
例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()
❶清楚是正常的班级方法;任何人都可以随时公开发布它。注意
与所有类方法一样,清楚地将self作为其第一个参数。 (请记住,你不包括
你打电话给方法时自我;这是Python为您添加的东西。)另请注意基本技术
这个包装类:存储一个真实的字典(数据)作为数据属性,定义一个a的所有方法
真正的字典有,并且每个类方法都重定向到真实的相应方法
字典。 (如果您忘记了,字典的清除方法会删除所有密钥及其关联的密钥
值)。
❷真实字典的复制方法返回一个与原始字典完全相同的新字典
(所有相同的键值对)。但是UserDict不能简单地重定向到self.data.copy,因为那样
方法返回一个真正的字典,你想要的是返回一个同一个类的新实例
作为自己。
答案 0 :(得分:0)
至于第1点。它只是回顾了包装类的基础知识......恕我直言,clear-method的文档块并不是回忆这些基础知识的最佳场所....
对于第2点。在调用对象的复制方法时,您的目标是复制实例,而不是实例中的数据存储区(上例中的“self.data”)
self.data.copy复制数据存储区:您仍然没有UserDict实例的副本......
但是我想知道代码提取中是否没有错误:“return UserDict(self.data)” - >这会在 SAME 数据存储上创建一个新实例?! 如果我没有错,那么调用“return UserDict(self.data.copy())”就行是对的....