前言
本文中代码运行的python版本一律采取2.7.13
科普:
经典类:classic class
新式类:new-style class
- python2.2 之前并没有新式类
- python2.2-2.7 新式类与经典类并存, 默认使用经典类, 除非显式继承object
- python3.X 中去除了经典类, 用户定义的所有类都隐式继承自object
如何使用新式类
class New(object): # 显式继承object类 pass class Old: pass class Old2(): pass
上述代码中的3种定义类的方法, 只有第一种方法定义的是新式类.
新式类VS经典类
新式类与经典类最主要的区别在于继承顺序, 事实上, 对于用户定义的每一个类, python 都会计算出一个方法解析顺序(Method Resolution Order, MRO)列表,它代表了类继承的顺序, 而由于经典类与新式类采用的算法不一致, 相同的继承关系可能会出现不一样的MRO列表.
import inspect class D: pass class C(D): pass class B(D): pass class A(B, C): pass print inspect.getmro(A) # (<class __main__.A at 0x000000000322BB88>, # <class __main__.B at 0x000000000322B9A8>, # <class __main__.D at 0x000000000322BC48>, # <class __main__.C at 0x000000000322B948>) class D(object): pass class C(D): pass class B(D): pass class A(B, C): pass print inspect.getmro(A) # (<class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.D'>, <type 'object'>)
可以看到, 经典类的MRO顺序A-B-D-C 与新式类的MRO顺序 A-B-C-D-object 是存在差异的, 这可能会是我们日常会遇到的坑.
而除了继承顺序的差异, 新式类还添加了内置属性__slots__
一般来说, 每个实例都有一个字典来管理实例的属性, 我们可以用__dict__ 来查看(__dict__并不保存类属性),它允许我们动态地修改实例的属性, 但是这也意味着每个实例都会有1个独立的字典需要我们去维护, 当我们需要创建大量的实例时, 这个操作是十分消耗内存的.
当我们在定义类时添加了__slots__属性后, 对象在实例化时就不会创建字典来管理实例属性, 而实例只能定义在__slots__里边已经设定好的属性名, 不允许动态添加其他未在__slots__里定义的属性
class Student(object): __slots__ = ('id', 'name', 'gender') def exam(self): pass s1 = Student() '__dict__' in dir(s1) # False s1.id = 10001 s1.class = 1 # AttributeError: 'Student' object has no attribute 'class' def func(): pass s1.exam = func # AttributeError: 'Student' object attribute 'f' is read-only
使用__slots__ 后我们不再能够动态地修改实例的属性, 那么使用__slots__究竟有什么好处呢"htmlcode">
class New(object): pass class Old: pass new = New() old = Old() print(new) # <__main__.New object at 0x0000000003262208> print(old) # <__main__.Old instance at 0x000000000321C6C8>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
python,新式类
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]