Python的新式类与旧式类

python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧类。为什么要在2.2中引进new style class呢?官方给的解释是:

为了统一类(class)和类型(type)

In [1]: class A():
   ...:     a = 1
   ...:

In [2]: class B(object):
   ...:     b = 2
   ...:

In [3]: a = A()

In [4]: b = B()

In [5]: type(a)
Out[5]: instance

In [6]: type(b)
Out[6]: __main__.B

In [7]: a.__class__
Out[7]: <class __main__.A at 0x10ef22668>

In [8]: b.__class__
Out[8]: __main__.B

继承的搜索顺序

继承搜索的顺序发生了改变,经典类多继承属性搜索顺序: 先深入继承树左侧,再返回,开始找右侧;新式类多继承属性搜索顺序: 先水平搜索,然后再向上移动

slots

新式类新增slots属性,可以限制类的属性和方法

In [1]: class Person(object):
   ...:     __slots__ = ('name','age')
   ...:

In [2]: p = Person()

In [3]: p.name = 'FangHao'

In [4]: p.age = 24

In [5]: p.weigth = 150
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-5-0b75d36f0341> in <module>()
----> 1 p.weigth = 150

AttributeError: 'Person' object has no attribute 'weigth'

pyhton2.x 默认都是旧式类,除非显示的继承object
python3.x 默认都是新式类,隐式的继承object

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,087评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,803评论 18 399
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,837评论 0 9
  • 此爱隔山海,山海皆可平
    紫毫笔阅读 170评论 0 0
  • xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi...
    大大大浣熊阅读 3,172评论 0 2