设为首页 收藏本站
查看: 1510|回复: 0

[经验分享] Python对象(上)

[复制链接]

尚未签到

发表于 2015-11-29 07:44:54 | 显示全部楼层 |阅读模式
  Python是一门面向对象的语言,在Python中一切都是对象,函数是对象,类型也是对象。
  下面就看看Python中对象相关的内容。

Python对象基本概念
  Python对象有三个基本的要素:


  • 身份:对象的唯一性身份标志,是该对象的内存地址(可用内建函数id()获得)
  • 类型:对象的类型决定了该对象可以保存什么类型的值,可进行什么样的操作(可用内建函数type()获得)
  • 值:对象代表的数据
  下面看看以下代码:



num =7
print id(num)
print type(num)
print num
print dir(num)
print
def isEven(num):
return (num%2 and [False] or [True])[0]
print id(isEven)
print type(isEven)
print isEven
print dir(isEven)
  通过代码中可以看到,我们定义了一个int类型的数值对象,以及一个函数对象,通过内建的dir()函数,我们可以查看对象支持的属性/方法:
DSC0000.png

Python对象起源
  在Python中有两个最基本的对象,<type 'object'> 和 <type 'type'>,这两个对象是所有对象的起源。
  通过下面的代码看看<type 'object'> 和 <type 'type'>的关系:
DSC0001.png
  代码中使用了"__class__"属性来查看对象的类型,以及"__bases__"属性来查看对象的父类,这两个属性很重要,可以查看本对象跟其他对象的关系。
  根据上面代码的输出可以得到下面的对象关系图:
DSC0002.png
  在Python对象系统中,<type 'object'>和<type 'type'>的关系就像鸡和蛋的关系,不能说谁先于(创建)谁,两者是相互依赖的,共同构成了Python对象系统的基础。


  • <type 'type'>的类型是<type 'type'>(它本身),<type 'type'>的父类是<type 'object'>
  • <type 'object'>的类型是<type 'type'>,<type 'object'>没有父类
  介绍到这里是不是感觉有点绕,没关系,我们继续看看下面关于对象的分类。

Python对象的分类
  在Python中,所有的对象可以分成两类:Type Object(类型对象,没错,类型也是一个对象)和Non-type Object(非类型对象)。
  下面通过一个具体的例子来看看对象的分类:
DSC0003.png
  根据上面例子的输出可以得到下面的对象关系图:
DSC0004.png
  这里我们就以list、mylist为例进行分析:


  • 首先,list是一种Python内置的容器类型,也就是说list是一个类型对象
  • 根据"__class__"属性可以看到,list这个类型对象的类型是<type 'type'>
  • 根据"__bases__"属性可以看到,list这个类型对象的父类是<type 'object'>
  • 通过mylist的"__class__"属性(<type 'list'>)可以看到,mylist是list类型对象生成的一个对象(Non-type Object(非类型对象))
  通过上面的分析我们可以验证Python对象分类的原则:


  • 如果一个对象是<type 'type'>的实例, 那它就是Type Object(类型对象), 否则是Non-type Object(非类型对象)

Type Object和Non-type Object
  通过前面的分析可以看到,Type Object(类型对象)包括:


  • <type 'type'>
  • <type 'object'>
  • 通过<type 'type'>生成的对象(类型对象)
  Type Object(类型对象)有两个重要的特性:


  • 可以被子类化(subclassed)
  • 可以被实例化(instantiated)
  回到上面的对象图,Type Object(类型对象)就是存放在前两个方格中的对象。
  那么其余的对象就是Non-type Object(非类型对象),回到对象图,Non-type Object(非类型对象)就是存放在第三个方格中的对象。实线不能出现在第三个方格中,因为这里的对象都不能进行子类化(继承);同样,虚线箭头不能出现在第三个方格中,因为这里的对象都不能进行实例化。

再看<type 'type'>
  <type 'type'>本身是一个类型对象;同时,<type 'type'>是所有类型对象(包括<type 'type'>自身)的类型,也就是说,对所有的类型对象进行type()或者获取"__class__"属性都将得到<type 'type'>。
  我们可以导入types模块,然后通过dir()内建函数来查看所有的内置类型对象,这些类型对象的类型都是<type 'type'>:
DSC0005.png

再看<type 'object'>
  同样,<type 'object'>是一个类型对象(因为type(object)是<type 'type'>);同时,<type 'object'>是所有类型对象(除去<type 'object'>本身)的父类

type()和__class__
  这里需要提一下的是,type()这个内置函数以及"__class__"这个属性,这两种方式都可以得到对象的类型,一般来说两种方式得到的结果是相同的。
  但是,对于Python中的经典类(classic class),type()和"__class__"的结果就是不同的了(这里就不介绍classic class和new-style class了):
DSC0006.png
  对于new-style class,type()和"__class__"的结果就是相同的了。

总结
  本文介绍了Python对象中的一些基本点:


  • Python对象的三要素
  • Python对象中的两个基本对象<type 'type'>和<type 'object'>
  • Python对象的分类:Type Object(类型对象)和Non-type Object(非类型对象)
  通过这些点,应该可以对Python对象有基本的了解。当需要进行对象分析的时候,不妨试试文中使用的对象图,通过这个关系图,可以更加直观的看到对象之间的关系。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-144745-1-1.html 上篇帖子: [Python] 利用Django进行Web开发系列(一) 下篇帖子: python 实现web框架simfish
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表