lin*_*ndy 11 python dictionary list subclass
编码这一天,上面哪一个是首选的,并推荐(在Python 2和3中)进行子类化?
我读过这篇文章UserList
并且UserDict
已经介绍了,因为过去list
并且dict
不能被分类,但由于这不再是一个问题,是否鼓励使用它们?
Mar*_*ers 14
根据您的用例,这些日子里,你会要么子类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
返回new的每个方法,以确保返回您的子类.
只有当你需要构建坚持使用list
或dict
对象的代码时(通过使用测试isinstance()
是将类型子类化为一个选项来考虑.这就是为什么它collections.OrderedDict
是dict
例如的子类).
归档时间: |
|
查看次数: |
4072 次 |
最近记录: |