我们知道,Python 中内置有一个 object 类,它是所有内置类型的共同祖先,也是所有没有显式指定父类的类(包括用户自定义的)的共同祖先。因此在实际编程过程中,如果想实现与某个内置类型具有类似行为的类时,最好的方法就是将这个内置类型子类化。

内置类型子类化,其实就是自定义一个新类,使其继承有类似行为的内置类,通过重定义这个新类实现指定的功能。

举个例子,如下所示创建了一个名为 newDict 的类,其中 newDictError 是自定义的异常类:

class newDictError(ValueError):

"""如果向newDict 添加重复值,则引发此异常"""

class newDict(dict):

"""不接受重复值的字典"""

def __setitem__(self,key,value):

if value in self.values():

if ((key in self and self[key]!=value) or (key not in self)):

raise newDictError("这个值已经存在,并对应不同的键")

super().__setitem__(key,value)

demoDict = newDict()

demoDict['key']='value'

demoDict['other_key']='value2'

print(demoDict)

demoDict['other_key']='value'

print(demoDict)

运行结果为:

{'key': 'value', 'other_key': 'value2'}

Traceback (most recent call last):

File "C:\Users\mengma\Desktop\demo.py", line 15, in

demoDict['other_key']='value'

File "C:\Users\mengma\Desktop\demo.py", line 9, in __setitem__

raise newDictError("这个值已经存在,并对应不同的键")

newDictError: 这个值已经存在,并对应不同的键

可以看到,newDict 是 Python 中 dict 类型的子类,所以其大部分行为都和 dict 内置类相同,唯一不同之处在于,newDict 不允许字典中多个键对应相同的值。如果用户试图添加具有相同值的新元素,则会引发 newDictError 异常,并给出提示信息。

由于目前尚未学习如何处理异常,因此这里没有 newDictError 做任何处理,异常处理会在后续章节做详细讲解。

另外,如果查看现有代码你会发现,其实很多类都是对 Python 内置类的部分实现,它们作为子类的速度更快,代码更整洁。

比如,list 类型用来管理序列,如果一个类需要在内部处理序列,那么就可以对 list 进行子类化,示例代码如下:

class myList(list):

def __init__(self,name):

self.name = name

def dir(self,nesting = 0):

offset = " " * nesting

print("%s%s/" % (offset,self.name))

for element in self:

if hasattr(element , 'dir'):

element.dir(nesting + 1)

else:

print("%s %s" % (offset,element))

demoList = myList('C语言中文网')

demoList.append('http://c.biancheng.net')

print(demoList.dir())

运行结果如下:

C语言中文网/

http://c.biancheng.net

None

其实,除了 Python 中常用的基本内置类型,collections 模块中还额外提供了很多有用的容器,这些容器可以满足大部分情况。

python编程语言继承_如何使用Python继承机制(子类化内置类型)相关推荐

  1. Python编程语言学习:仅需一行代码将字符串化的数字数组、int数组、float数组实现之间互换(将一个字符串数组转换成整型数组)

    Python编程语言学习:仅需一行代码将字符串化的数字数组.int数组.float数组实现之间互换(将一个字符串数组转换成整型数组) 目录

  2. python编程语言优缺点_原创001 第一次接触这个神奇而又无所不能的编程语言:Python...

    ***********************人生苦短,我用Python,不定期更新博客,小伙伴们记得关注******************** OK,说到Python这个语言,相信大家.对它还是有 ...

  3. 我的python世界下载_我的Python世界

    商品参数\ \ \ 我的Python世界 定价 69.00 出版社 人民邮电出版社 版次 1 出版时间 2018年07月 开本 16开 作者 程晨 装帧 平装-胶订 页数 169 字数 ISBN编码 ...

  4. 文科生自学python要多久_怎么自学python,大概要多久?

    都让开!本人文科生,自学Python 2年半,作为一个曾经完全0基础,啥都不懂纯靠自学学会python的文科生,有一些不成熟的小建议可以分享一下. 首先不要觉着编程难,只要你认识26个英文字母,有一点 ...

  5. python len函数_知识清单Python必备的69个函数,你掌握了吗?

    本文纲要 Python 作为一门高级编程语言,为我们提供了许多方便易用的内置函数,节省了不少开发应用的时间.目前,Python 3.7 共有 69 个内置函数,一些是我们耳熟能详的函数,另一些却不是很 ...

  6. python递归函数例题_递归案例python

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 而对应的中文翻译 "递归" 却表达了两个意思:"递 ...

  7. python数控机器人_科研一角|Python语言在人工智能加工中心机器人方面的应用

    原标题:科研一角|Python语言在人工智能加工中心机器人方面的应用 科研一角|Python语言在人工智能加工中心机器人方面的应用 (一)Python在智能机器人编程技术中的应用 用Python编写的 ...

  8. 学python多贵_老男孩学习Python多少钱,学习Python贵吗?

    而且现在不少人都想要参加python培训,在进行python培训之前,大家最关注的的莫过于培训机构好不好的问题了,当然了收费也是我们需要考虑的一点.当然选择培训机构不能只看费用方面的,还需要考虑师资力 ...

  9. python编程语言能干什么-python编程语言的优势与劣势--python能干啥

    首先先发表小编的观点吧嘿嘿:python并不适合作为第一编程语言,但是第二编程语言的首选 (哥哥们先别喷我,且听我慢慢说来~~~) 先解释一下啥是第一第二编程语言吧: 通常从事开发的程序员都会学不止一 ...

最新文章

  1. Spring Boot 2.3 中开启Spring Security
  2. 新加坡国立大学李千骁:动力学系统与监督学习的关系探索
  3. 在linux 下怎么查看服务器的cpu和内存的硬件信息
  4. python代码写好了怎么运行不了-python代码可以直接运行吗 Python写了代码如何运行...
  5. java程序初始化顺序
  6. 【3】python核心编程 第六章-序列:字符串、列表和元组
  7. 微信小程序-开心大转盘(圆盘指针)代码分析
  8. mysql limit acs_mysql查询操作
  9. android ImageSwitcher案例
  10. SSCOM下载及无法打开问题解决
  11. 优秀信息系统项目经理应该具备的技能和素质
  12. SSO单点登录Java实现实例
  13. 网络天空、诺维格、高波、爱虫病毒专杀工具 040421 下载
  14. 蓝桥杯 A组 迷宫地图
  15. LeetCode(数据库)- 计算税后工资
  16. 怎么把分钟转化成秒_一分钟短视频文案范文怎么写?短视频文案必爆公式分享(附文案范文模板)...
  17. 【APS】90张专业PPT学习高级计划与排程(APS)
  18. bmob php支付,个人开发者也能盈利!Bmob支付SDK使用实例
  19. 贪吃机器人DIY(二)
  20. 如何PC机上搭建 中标麒麟系统+达梦数据库的开发环境

热门文章

  1. java抛出异常齁_解決 Elasticsearch 使用 Java High Level REST Client 時出現 NoClassDefFoundError 錯誤...
  2. AcWing 9. 分组背包问题(分组背包模板)
  3. TCP/IP协议 TCP包深入理解
  4. redis(版本redis-5.0.2)的安装步骤
  5. 亚马逊表示并未放弃WP平台:正在打造新应用
  6. VS关闭却不关闭IIS Express并利用其进行调试
  7. Redis学习手册(List数据类型)(转)
  8. 在网页浏览器中原生显示PDF文件
  9. linux tomcat配置https
  10. UINavigationItem 设置UIBarButtonItem