gpt4 book ai didi

python - list vs UserList 和 dict vs UserDict

转载 作者:太空狗 更新时间:2023-10-29 17:57:57 26 4
gpt4 key购买 nike

今天编码,首选和推荐(在 Python 2 和 3 中)以上哪项用于子类化?

我读到引入了UserListUserDict,因为以前listdict不能被子类化,但既然这不再是问题,是否鼓励使用它们?

最佳答案

根据您的用例,现在您可以直接子类化 listdict,或者您可以子类化 collections.MutableSequence and collections. MutableMapping ;除了使用 User* 对象之外,还有这些选项

User* 对象在 Python 3 中被移动到 collections 模块;但是在 Python 2 stdlib 中使用这些代码的任何代码都已替换为 collections.abc 抽象基类。即使在 Python 2 中,UserListUserDict 也是增强的 collections.* 实现,添加方法 list dict 提供超出基本接口(interface)的内容。

collections 类使您的子类必须实现什么才能成为一个完整的实现变得更加清晰,还可以让您实现更小的子集(例如 collections.Mapping,为类似元组的对象实现只读映射或 collections.Sequence)。

User* 实现也应该在你需要实现基本接口(interface)之外的所有东西时使用;例如如果您需要像 list 一样支持加法、排序、反转和计数。

对于其他任何事情,使用collections 抽象基类作为基础几乎总是更好;内置类型针对速度进行了优化,并且对子类不友好。例如,您需要重写 list 上的几乎所有方法,通常会返回一个新的 list,以确保返回您的子类。

仅当您需要构建坚持使用listdict 对象的代码时(通过使用isinstance() 测试) 将类型子类化是一个需要考虑的选项。这就是为什么 collections.OrderedDictdict 的子类,例如。

关于python - list vs UserList 和 dict vs UserDict,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25464647/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com