首页 / PYTHON / 覆盖Python中的特殊功能
覆盖Python中的特殊功能
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了覆盖Python中的特殊功能,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1698字,纯文字阅读大概需要3分钟。
内容图文
![覆盖Python中的特殊功能](/upload/InfoBanner/zyjiaocheng/815/b02cfca555574b64bdd7c308880b0263.jpg)
有没有办法在python中覆盖内置类型的特殊函数?例如,我想创建一个继承自内置字典的SpecialDict类.我想允许用户为我的特殊字典中的键和值定义自定义验证函数,如下所示:
def __init__(self, keyValidator = True, valueValidator = True):
self.keyValidator = keyValidator
self.valueValidator = valueValidator
使用这个,我可以拦截update方法中的值的添加,如下所示:
def update(self,key,value):
assert (self.keyValidator(key))
assert (self.valueValidator(key))
self[key] = value
但如果有人决定继续使用[]作为访问权限,这将无效.或者,如果有人使用字典文字创建对象.
mySpecialDict = SpecialDict
mySpecialDict['hello'] = 54
解决方法:
有人无法将SpecialDict的实例创建为字典文字,因为字典文字就是这样;一本普通的字典.
至于使用方括号表示法设置项目,如在mySpecialDict [‘hello’] = 54中,它只对应于mySpecialDict .__ setitem __(‘hello’,54).同样,使用方括号表示法检索项目对应于__getitem__方法的调用.无论mySpecialDict是什么类,都是如此;它是一个普通的字典,一个继承内置字典的类,还是一些完全不相关的类.所以你可以实现那些方法来改变他们做的事情(使用super(SpecialDict,self).__ setitem __(key,value)或dict .__ setitem __(self,key,value)来引用正常的实现,当你需要时) .
您将遇到的一个问题是,其他dict方法的内置实现中的某些(全部?)将不会尊重您重写的__setitem__或__getitem__.所以你将无法继承它们;你必须覆盖所有这些,并根据你的基本操作版本完全重新实现它们,或者至少在超类调用“周围”运行你的验证.
一个不那么痛苦的方法实际上可能不是对内置字典进行子类化,而是使用collections.Mapping或collections.MutableMapping基类来实现包装普通字典的自定义“类似dict”的对象以获取字典接口.使用这种方法,您只需要自己实现大约6种基本方法(通过围绕对包装字典的调用插入验证逻辑),并根据它们获得其他方法的合理定义.见http://docs.python.org/library/collections.html#collections-abstract-base-classes
内容总结
以上是互联网集市为您收集整理的覆盖Python中的特殊功能全部内容,希望文章能够帮你解决覆盖Python中的特殊功能所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。