Python学习_01_对象
之前关于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_对象的更多相关文章
- python学习之对象的三大特性
在面向对象程序设计中,对象可以看做是数据(特性)以及由一系列可以存取.操作这些数据的方法所组成的集合.编写代码时,我们可以将所有功能都写在一个文件里,这样也是可行的,但是这样不利于代码的维护,你总不希 ...
- python学习——面对对象进阶
一.isinstance和issubclass isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo: pass a = Foo() print(isins ...
- Python学习笔记——对象
Python 的对象定义方式如下: class Person: def __init__(self, name): self.name = name ...
- python学习-class对象
# 面向对象 python,java,c## 面向过程 C # 类和对象# 类 类型类别.类别 物以类聚 一类事物# 班级.人类.动物类.车.学生类.老师类.手机.电脑# 统称 == 共同特性# 不具 ...
- 4月11日 python学习总结 对象与类
1.类的定义 #类的定义 class 类名: 属性='xxx' def __init__(self): self.name='enon' self.age=18 def other_func: pas ...
- Python学习笔记_Python对象
Python学习笔记_Python对象 Python对象 标准类型 其它内建类型 类型对象和type类型对象 Python的Null对象None 标准类型操作符 对象值的比較 对象身份比較 布尔类型 ...
- Python学习笔记之类与对象
这篇文章介绍有关 Python 类中一些常被大家忽略的知识点,帮助大家更全面的掌握 Python 中类的使用技巧 1.与类和对象相关的内置方法 issubclass(class, classinfo) ...
- 【Python学习之七】类和对象
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 一.面向对象编程1.概念(1)面向对象编程(OOP ...
- Python学习day34-面向对象和网络编程总结
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
随机推荐
- input required
HTML <input> required 属性 HTML <input> 标签 实例 带有必填字段的 HTML 表单: <form action="demo ...
- javascript设计模式——策略模式
前面的话 在程序设计中,常常遇到类似的情况,要实现某一个功能有多种方案可以选择.比如一个压缩文件的程序,既可以选择zip算法,也可以选择gzip算法.这些算法灵活多样,而且可以随意互相替换.这种解决方 ...
- FreeRTOS--疑难解答
此章节涉及新手最常遇见的3种问题: 错误的中断优先级设置 栈溢出 不恰当的使用printf() 使用configASSERT()能够显著地提高生产效率,它能够捕获.识别多种类型的错误.强烈建议在开发或 ...
- java基础进阶一:String源码和String常量池
作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/8046564.html 邮箱:moyi@moyib ...
- AngularJS 控制器通信
指令与控制器之间通信,无非是以下几种方法: 基于scope继承的方式 基于event传播的方式 service的方式 基于scope继承的方式 最简单的让控制器之间进行通信的方法是通过scope的继承 ...
- 运行期以索引获取tuple元素-C++11之2
//运行期以索引获取tuple元素-C++11之2 //需支持C++11及以上标准的编译器,VS2017 15.5.x.CodeBlocks 16.01 gcc 7.2 //参见<深入应用C++ ...
- iscroll4 input textarea不能获得焦点问题
最近在做移动端项目的时候,使用iscroll4实现页面滚动效果,之后发现页面中的input,textarea等不能得到焦点,输入内容. 问题原因是: 使用iscroll之后,输入框无法聚焦,页面文字等 ...
- 编码中的setCharacterEncoding 理解<转自-fancychendong>
1.pageEncoding="UTF-8"的作用是设置JSP编译成Servlet时使用的编码. 2.contentType="text/html;charset=UTF ...
- 2014/08/23——OJ及相关站点打开速度非常慢,训练计划login直接error!
问题: 这个问题存在已经将近一个星期了.刚開始时发现OJ及相关的站点有时候打开有点慢,那时候也没在意,后来时快时慢的越来越频繁:今天早上直接一直都打开非常慢(无论什么时候.这样的情况);训练计划和做题 ...
- 有关怎样入门ACM
想给大家看看 所以就弄了原创了,造成作者困扰请联系在下. 来源: 吴垠的日志 一些题外话 首先就是我为什么要写这么一篇日志.原因非常easy,就是由于前几天有个想起步做ACM人非常诚恳的问我该怎样 ...