知行编程网知行编程网  2022-10-16 03:30 知行编程网 隐藏边栏  18 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Python中UserDict、UserString、UserList有用吗?的相关知识,包括中生元有用吗,以及python私有属性和方法的访问方式这些编程知识,希望对大家有参考作用。

继承Python内置结构的坑。从 Python 2.2 开始,Python 支持继承 Python 内置结构,例如 list 和 dict。为了简化项目内容,直接继承了dict,结果却不如预期。现在让我们好好研究一下:

UserDict、UserString、UserList 在 Python 中有用吗?

举个例子:

In : class NewDict(dict):
...:     def __getitem__(self, key):
...:         return 42
...:
In : d = NewDict(a=1)
In : d
Out: {'a': 42}
In : d2 = {}
In : d2.update(d)
In : d2
Out: {'a': 1}

也就是说NewDict的__getitem__方法被dict.update给忽略了。

In : from UserDict import UserDict
In : class NewDict(UserDict):
...:     def __getitem__(self, key):
...:         return 42
...:
In : d = NewDict(a=1)
In : d['b'] =2
In : d
Out: {'a': 1, 'b': 2}
In : d['b']
Out: 42
In : d2 = {}
In : d2.update(d)
In : d2
Out: {'a': 42, 'b': 42}

这才是对的呀。

后来在PyPy文档中找到原因,就是这种C实现结构的内置方法大部分忽略了重载方法。

我认为像 UserDict 这样的类是一个遗留问题,但现在我知道这是有原因的。事实证明,UserDict、UserString、UserList 等模块是非常有必要的。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享