python 继承机制(子类化内置类型)
2024-10-08 03:28:41
1. 如果想实现与某个内置类型具有类似行为的类时,最好的方法就是将这个内置类型子类化。
2. 内置类型子类化,其实就是自定义一个新类,使其继承有类似行为的内置类,通过重定义这个新类实现指定的功能。
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/24724/.spyder-py3/temp.py", line 15, in <module>
demoDict['other_key'] = 'value'
File "C:/Users/24724/.spyder-py3/temp.py", line 9, in __setitem__
raise newDictError("这个值已经存在,并对应不同的键")
newDictError: 这个值已经存在,并对应不同的键
其实很多类都是对python内置类的部分实现,它们作为子类的速度更快,代码更整洁。
对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('三打白骨精')
demoList.append('真假孙悟空')
print(demoList.dir())
三打白骨精
真假孙悟空
None
最新文章
- myeclipse环境下开发freemarker
- GCHandler的使用
- 【JAVA多线程安全问题解析】
- [原]AppPoolService-IIS应用程序池辅助类(C#控制应用程序池操作)
- CSS深入研究:display的恐怖故事解密(2) - table-cell(转)
- bzoj1563
- [日历] C#修改CNDate日历帮助类 (转载)
- SpringMVC加载.roperties文件属性值的方法?
- Java DecimalFormat 用法
- Qt5模块简介
- 通过一篇YAML来学习YAML
- CF 1051F
- Spring中的CharacterEncodingFilter
- Linux - 查看命令所属的软件包
- Java的Properties类使用
- L260
- Web jsp开发学习——新建一个项目
- PHP 友好的dump
- isset() 与 array_key_exists() 比较
- Python列表切片详解([][:][::])