- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
今天编码,首选和推荐(在 Python 2 和 3 中)以上哪项用于子类化?
我读到引入了UserList
和UserDict
,因为以前list
和dict
不能被子类化,但既然这不再是问题,是否鼓励使用它们?
最佳答案
根据您的用例,现在您可以直接子类化 list
和 dict
,或者您可以子类化 collections.MutableSequence
and collections. MutableMapping
;除了使用 User*
对象之外,还有这些选项。
User*
对象在 Python 3 中被移动到 collections
模块;但是在 Python 2 stdlib 中使用这些代码的任何代码都已替换为 collections.abc
抽象基类。即使在 Python 2 中,UserList
和 UserDict
也是增强的 collections.*
实现,添加方法 list
和 dict
提供超出基本接口(interface)的内容。
collections
类使您的子类必须实现什么才能成为一个完整的实现变得更加清晰,还可以让您实现更小的子集(例如 collections.Mapping
,为类似元组的对象实现只读映射或 collections.Sequence
)。
User*
实现也应该在你需要实现基本接口(interface)之外的所有东西时使用;例如如果您需要像 list
一样支持加法、排序、反转和计数。
对于其他任何事情,使用collections
抽象基类作为基础几乎总是更好;内置类型针对速度进行了优化,并且对子类不友好。例如,您需要重写 list
上的几乎所有方法,通常会返回一个新的 list
,以确保返回您的子类。
仅当您需要构建坚持使用list
或dict
对象的代码时(通过使用isinstance() 测试)
将类型子类化是一个需要考虑的选项。这就是为什么 collections.OrderedDict
是 dict
的子类,例如。
关于python - list vs UserList 和 dict vs UserDict,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25464647/
我相信我犯了一个我找不到的小误解。基本上,我正在设计一个简单的数据容器来保存 {key1:[values1], key2:[values2]}。 class Cells(object): de
使用 UserDict 类有什么好处? 我的意思是,如果不是 class MyClass(object): def __init__(self): self.a = 0
我想定义一个 UserDict 来从 JSON 读取值并存储给定键的位置。 JSON 文件如下所示: { "pages": [ { "areas": [
这个问题在这里已经有了答案: How to pickle and unpickle instances of a class that inherits from defaultdict? (2 个
我们代码库中的一些类继承自 UserDict 以充当 dict 对象。 我试图为它们应用一个元类,但我做不到,因为它们是旧式类。 那么,是否有我可以使用的新型 UserDict 版本? 最佳答案 您可
如果我希望一个类具有字典行为,为什么要继承dict 或UserDict? 最佳答案 你可以继承自dict在任何 2.2 版或更高版本的 Python 中,但您必须覆盖每一个感兴趣的方法——例如,您对
import unittest from UserDict import UserDict class MyDict(UserDict): def __init__(self, x):
UserDict、dict和ABC有什么区别,推荐哪一种?文档似乎已弃用 UserDict? 似乎 UserDict 的 update() 会使用我的 setitem 方法,而 dict 不会?鉴于我
UserDict Source Code UserDict 有__copy__ 和.copy() 方法。前者由copy.copy(x) 触发,后者由x.copy() 触发。在 copy() 中,它首先
今天编码,首选和推荐(在 Python 2 和 3 中)以上哪项用于子类化? 我读到引入了UserList和UserDict,因为以前list和dict不能被子类化,但既然这不再是问题,是否鼓励使用它
我是一名优秀的程序员,十分优秀!