之前关于python的知识比较零散,这一个系列的随笔将python重新学习整理一遍。学习书籍《Python核心编程》第二版。

Python对象基础

python并不是一个单纯面向对象的语言,他融合了其他语言,如函数式语言的特性。但是python的面向对象也是很强大的。

所有的Python对象都具有三个属性:身份(id),类型(type),值(value)。身份属性可以通过内建函数id()获得,可以看做是对象的内存地址,每个对象的id值都是唯一的,所以可以用id来判断两个对象是否是同一块内存的不同引用;类型属性可以通过内建函数type()来获得,由于python的面向对象特性,类型本身也是一个对象,所以type()返回的不仅仅是一个字符串,而是一个对象,所以类型也有类型,所有的类型的类型为type。值属性则是对象表示的具体数据。由于这三个属性是每个对象都具有的,当一个对象被创建时,这三个属性就被赋值,并且除了值之外都不能被改变,所以python是一门强类型语言。对象除了三个基本属性之外,还有其他的属性、值、可执行代码等。

python的类型包括标准类型,如Integer、Boolean、String、Tuple,以及一些特殊的内建类型如type、Null、文件、集合、函数、模块、类等,还有一些内部类型,如代码、帧、跟踪记录、切片、省略和Xrange。

代码的身份:由于python通过引用可以将一个对象赋值到另一个变量,原始对象的引用计数加一次,当某一个引用试图改变该对象的值时,若该对象是不可更新类型,实际工作是新建一个新的对象,并且将该变量引用该新对象,若该对象是可更新类型,则更新该对象的内容:

如上idle执行结果可以看出,在python中,一些小的整形会被缓存,当其他的变量值等于该整形值时,会创建一个该整形对象的引用,而浮点数和大的整形并没有缓存,当一个对象的引用计数为0时,python会再适当的时候对其进行垃圾回收。

通过内建函数 is 、 is not来判断两个变量是否是同一个对象的不同引用。

Python的内建函数和类型

evel()函数,python的evel()函数可以对传入的字符串求值,repr()函数和str()函数可以将一个对象转换为字符串表示,但是有所区别,str()函数对用户比较友好,可以转换为适合打印的字符串,repr()函数转换的字符串对python比较友好,比较合适用于运算求值。(具体的区别还没有搞清楚,相信之后一定会涉及到)。

type()函数和isinstance()函数可以判断一个对象的类型,type()函数传入一个对象并且返回其类型,isinstance()则传入一个对象和一个类型的元组,并且判断该对象的类型是否在元组中,返回判断结果的布尔值。

Python在2.2之后统一了类型和类,所有的类型都是一个类,并且所有内建类型的转换函数都是工厂函数,也是对面向对象的一个加强。当执行int()、tpye()、list()时,实际上是创建了相应的类型的实例。所有的内建类型为了这次统一,都添加了相应的内建函数,当执行int()时,实际上的工作其实是调用了int类中的__init__()方法,而在强制将一个字符串’123’转换为整形时,实际上是在string类中实现__int__()的方法。工厂函数之所以可以直接调用,应该是在Class类中添加了__call__方法,使得每一个类都是可调用对象,通过给类添加该方法,同样可以实现将对象可调用化。

Python标准类型的分类

对于python中的标准类型,可以按照存储模型、更新模型、访问模型细分:

存储模型:
    标量/原子类型        数值、字符串
    容器类型                列表 、元组、字典

更新模型:
    可变类型                列表、字典
    不可变类型            数字、 字符串、元组

访问模型
    直接访问                数字
    顺序访问                字符串、列表、元组
    映射访问                字典

同时,在python中,没有char、byte、指针等类型,python中的整形和长整形会自动转换(python2.3开始),而长整形的大小取决于运行机器的虚拟内存大小。

Python学习_01_对象的更多相关文章

  1. python学习之对象的三大特性

    在面向对象程序设计中,对象可以看做是数据(特性)以及由一系列可以存取.操作这些数据的方法所组成的集合.编写代码时,我们可以将所有功能都写在一个文件里,这样也是可行的,但是这样不利于代码的维护,你总不希 ...

  2. python学习——面对对象进阶

    一.isinstance和issubclass isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo: pass a = Foo() print(isins ...

  3. Python学习笔记——对象

    Python 的对象定义方式如下: class Person:        def __init__(self, name):            self.name = name         ...

  4. python学习-class对象

    # 面向对象 python,java,c## 面向过程 C # 类和对象# 类 类型类别.类别 物以类聚 一类事物# 班级.人类.动物类.车.学生类.老师类.手机.电脑# 统称 == 共同特性# 不具 ...

  5. 4月11日 python学习总结 对象与类

    1.类的定义 #类的定义 class 类名: 属性='xxx' def __init__(self): self.name='enon' self.age=18 def other_func: pas ...

  6. Python学习笔记_Python对象

    Python学习笔记_Python对象 Python对象 标准类型 其它内建类型 类型对象和type类型对象 Python的Null对象None 标准类型操作符 对象值的比較 对象身份比較 布尔类型 ...

  7. Python学习笔记之类与对象

    这篇文章介绍有关 Python 类中一些常被大家忽略的知识点,帮助大家更全面的掌握 Python 中类的使用技巧 1.与类和对象相关的内置方法 issubclass(class, classinfo) ...

  8. 【Python学习之七】类和对象

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 一.面向对象编程1.概念(1)面向对象编程(OOP ...

  9. Python学习day34-面向对象和网络编程总结

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

随机推荐

  1. PHP的AES加密类

    PHP的AES加密类 aes.php <?php /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ...

  2. zuul超时的解决方案

    参考http://www.coolxuewang.com/view/10 在zuul的配置文件里增加如下配置: ribbon:    ConnectTimeout: 6000    ReadTimeo ...

  3. json数据导出excel

    最近做的一个项目涉及到把数据导出到excel里面,网上找来找去,最终找到两种办法,废话不多说了 第一种: 拿到表格的id就可以抓取表格的数据,导出到excel,这种方式简单粗暴,引入这两个插件即可. ...

  4. JS对象属性命名规则

    JS标识符的命名规则,即变量的命名规则: 标识符只能由字母.数字.下划线和'$'组成 数字不可以作为标识符的首字符 对象属性的命名规则 通过[]操作符为对象添加属性时,属性名称可以是任何字符串(包括只 ...

  5. 多线程编程学习笔记——async和await(二)

    接上文 多线程编程学习笔记——async和await(一) 三.   对连续的异步任务使用await操作符 本示例学习如何阅读有多个await方法方法时,程序的实际流程是怎么样的,理解await的异步 ...

  6. Python爬虫(十九)_动态HTML介绍

    JavaScript JavaScript是网络上最常用也是支持者对多的客户端脚本语言.它可以收集用户的跟踪数据,不需要重载页面直接提交表单,在页面嵌入多媒体文件,甚至运行网页游戏. 我们可以在网页源 ...

  7. 升级安装php7要考虑的几个方面

    php7从推出到现在,前两天官方已经发布到7.2版本,把自己升级和安装php7中遇到的问题和解决方法做一个笔记,内容主要包括:1) mysql2) php3) nginx4) memcache扩展5) ...

  8. android面试总结01 activity生命周期

    面试常常会被问到的: Q:能说一下Activity的生命周期吗? Activity生命周期例如以下: onCreat onStart onResume onPause onStop onDestory ...

  9. 四.RabbitMQ之发布/订阅(Publish/Subscribe)

    一.基础知识点 在上述章节中,我们理解的RabbitMQ是基于如下这种模式运作的. 而事实上,这只是我们简单化了的模型的结果,真正的模型应该是这样的. P:Producer 生产者,生产消息,把它放进 ...

  10. mac brew install nginx遇到的坑

    默认使用 brew install nginx 出现了一下的错误: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: ...