使用python的UserDict模块
我正在从diveintopython一书中学习python。 在问这个问题之前,我参考了给出的答案并阅读了给出的文档,但它们并没有明确说明我想知道什么 在这本书中,一个类UserDict被编写为使用python的UserDict模块,python,object,Python,Object,我正在从diveintopython一书中学习python。 在问这个问题之前,我参考了给出的答案并阅读了给出的文档,但它们并没有明确说明我想知道什么 在这本书中,一个类UserDict被编写为 class UserDict: def __init__(self, dict=None): self.data = {} if dict is not None: self.update(dict) 接下来提到了另一个类FileInfo class FileI
class UserDict:
def __init__(self, dict=None):
self.data = {}
if dict is not None: self.update(dict)
接下来提到了另一个类FileInfo
class FileInfo(UserDict):
"store file metadata"
def __init__(self, filename=None):
UserDict.__init__(self)
self["name"] = filename
我的问题是UserDict类的一个对象有一个属性data,它是一个字典。当我创建FileInfo类的对象时,该对象继承了这一点,但为什么该对象本身是一个字典,而不是将其data属性作为字典
请告诉我这里是否有我误解的地方。您没有展示更多的
UserDict
实现(否则它就不会有一个更新
方法)。。。这本书很可能是在展示一段历史
在用户可以直接将dict子类化之前,这个类可能非常有用。基本上,它允许用户创建看起来和行为都像dict的对象——然后他们可以为特定的目的调整行为(考虑中提供的所有dict子类)。现在,由于您可以直接将dict
子类化(或使用collections.MutableMapping
ABC)来创建自己的类似dict的类,因此几乎不再需要UserDict
,它只支持遗留代码
现在就实现而言,由于它们不能直接将
dict
子类化,所以它们通过提供相同的接口。他们可以简单地将dictionary方法委托给底层dict(self.data
)。通过这种方式,他们知道他们有一个几乎在所有方面都像dict的对象。而且,由于它是在纯python中构建的,用户可以对它进行子类化以调整行为。这在python 3.x中现在不直接支持
一种解决方法是使用collection类并添加以下内容:
从集合导入UserDict
正如您在回答中所说,“它允许用户创建外观和行为类似于dict的对象”,为什么对象本身不是字典,即self={},而是self.data={}?这是我的问题,如果您在函数内部设置self={}
(而且您可以),但是更改不会传播到函数之外。。。