编码这一天,对于子类化,上面的哪一个是推荐和推荐的(在Python 2和3中都是推荐的)?
我读了UserList
和UserDict
过去已经出台,因为list
并dict
不能被继承,但由于这是不是一个问题了,是不是鼓励使用它们?
根据您的用例,这些天你最好要么子类list
和dict
直接,或者你也可以继承collections.MutableSequence
和collections. MutableMapping
; 这些选项除了使用User*
对象外。
这些User*
对象已被移至collections
Python 3中的模块。但是使用Python 2 stdlib中的代码的任何代码都已被collections.abc
抽象基类替换。甚至在Python 2,UserList
和UserDict
被增强的collections.*
实现方式中,添加方法list
和dict
提供超出了基本接口。
这些collections
类使子类变得更清晰,以使其成为完整的实现,并且还允许您实现较小的子集(例如collections.Mapping
,实现只读映射或collections.Sequence
类似元组的对象)。
User*
当您还需要实现基本接口以外的所有功能时,应使用这些实现。例如,如果您需要像添加一样支持加法,排序,反转和计数list
。
对于其他任何事情,使用collections
抽象基类作为基础几乎总是更好。内置类型针对速度进行了优化,并且不是子类友好的。例如,您将需要覆盖list
通常list
返回新值的几乎所有方法,以确保返回您的子类。
仅当您需要构建坚持使用list
或dict
对象的代码(通过测试使用isinstance()
)时,才可以考虑将类型子类化。这就是为什么collections.OrderedDict
使用的子类dict
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句