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 次 |
| 最近记录: |