8.12. UserDict —字典对象的类包装

源代码: Lib/UserDict.py


该模块定义一个 mixin DictMixin,为已经具有最小 Map 接口的类定义所有字典方法。这极大地简化了需要替换为词典的编写类(例如 shelve 模块)。

该模块还定义了一个类UserDict,该类充当字典对象的包装器。可以直接从dict继承子类(此Function自 Python 2.2 版开始可用)已大大取代了对此类的需要。在引入dict之前,使用UserDict类创建类似于字典的子类,这些子类pass覆盖现有方法或添加新方法来获得新行为。

UserDict模块定义UserDict类和DictMixin

Note

为了向后兼容,UserDict的实例不可迭代。

除了支持 Map 的方法和操作(请参见Map 类型— dict)之外,UserDictIterableUserDict实例还提供以下属性:

此 mixin 应该用作超类。添加上述每种方法都会逐渐增加更多Function。例如,定义除delitem()以外的所有内容,只会从完整界面中排除pop()popitem()

除了四种基本方法外,定义contains()iter()iteritems()带来了越来越多的效率。

由于 mixin 不了解子类构造函数,因此不会定义init()copy()

从 Python 2.6 版开始,建议使用collections.MutableMapping而不是DictMixin

请注意,DictMixin 不实现viewkeys()viewvalues()viewitems()方法。

8.13. UserList —列表对象的类包装

Note

当 Python 2.2 发布时,该类的许多用例都被直接子类list所包含。但是,仍然有少数用例。

该模块提供了围绕底层数据存储的列表接口。默认情况下,该数据存储为list;但是,它可以用于在其他对象(例如持久性存储)周围包装类似列表的接口。

此外,可以使用多重继承将此类与内置类混合使用。有时这可能很有用。例如,您可以同时从UserListstr继承。对于实数list和实数str都是不可能的。

该模块定义一个类,充当列表对象的包装器。它是您自己的类似列表的类的有用 Base Class,可以从它们继承并覆盖现有方法或添加新方法。这样,可以将新行为添加到列表中。

UserList模块定义UserList类:

Note

UserList类已移至 Python 3 中的collections模块。2to3工具在将源转换为 Python 3 时将自动适应导入。

除了支持可变序列的方法和操作(请参见序列类型— str,unicode,list,tuple,bytearray,buffer,xrange)之外,UserList实例还提供以下属性:

子类要求: UserList的子类应提供一个构造函数,该构造函数可以不带任何参数也可以不带一个参数而调用。返回新序列的列表操作try创建实际实现类的实例。为此,假定可以使用单个参数调用构造函数,该参数是用作数据源的序列对象。

如果派生类不希望遵守此要求,则该类支持的所有特殊方法都将被覆盖;请咨询资源以获取有关在这种情况下需要提供的方法的信息。

在版本 2.0 中进行了更改:Python 版本 1.5.2 和 1.6 还要求构造函数可以不带参数地调用,并提供可变的data属性。早期版本的 Python 并未try创建派生类的实例。

8.14. UserString —字符串对象的类包装

Note

该模块中的此类UserString仅可用于向后兼容。如果您编写的代码不需要使用 Python 2.2 之前的版本,请考虑直接从内置str类型子类化,而不是使用UserString(没有等效于MutableString的内置子类)。

该模块定义一个类,充当字符串对象的包装器。对于您自己的类似字符串的类,它是一个有用的 Base Class,可以从它们继承并覆盖现有方法或添加新方法。这样,可以向字符串添加新行为。

应该注意的是,与 true 的字符串或 Unicode 对象相比,这些类的效率非常低。 MutableString尤其如此。

UserString模块定义以下类别:

Note

UserString类已移至 Python 3 中的collections模块。2to3工具在将源转换为 Python 3 时将自动适应导入。

自 2.6 版起弃用:MutableString类已在 Python 3 中删除。

除了支持字符串和 Unicode 对象的方法和操作(请参见String Methods)之外,UserString实例还提供以下属性:

首页