之前关于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. 守护进程VS守护线程

    守护(daemon)进程 引入: join()方法可以使一个进程运行完之后再执行下一个进程,而daemon()方法就是主进程的代码执行完毕之后,不需要等待子进程,立即终止子进程. join()方法和d ...

  2. 分享一些JAVA相关资源

    前言 以前在学习JAVA时,因为搜索相关资源过于不便,所以在搜集了一些好用的资源之后,将此分享. 文档主要包括面试文档, JAVA的技术文档(如JAVA并发实战.设计模式之类),LINUX的相关文档以 ...

  3. float和double的区别

    1.float是单精度类型,精度有效数字为6位,超出则会四舍五入,取值范围为10的-38次方到10的38次方,float占用存储空间为4个字节. 2.double是双精度类型,精度有效数字为15位,超 ...

  4. 大白话Vue源码系列(03):生成AST

    阅读目录 AST 节点定义 标签的正则匹配 解析用到的工具方法 解析开始标签 解析结束标签 解析文本 解析整块 HTML 模板 未提及的细节 本篇探讨 Vue 根据 html 模板片段构建出 AST ...

  5. 页面输入的数据格式转换类:BaseAction(经常使用于Struts框架中)

    在我们接收页面传来的数据时,这些数据都是以String类型接收的,所以要进行数据格式转换,这时候就能够统一为它们进行转换,并且在处理这些数据的类中能够继承ActionSupport类,然后让每个接收数 ...

  6. Maven构建真正的J2EE项目

    今天同事问起我眼下用Maven构建的多模块项目架构和曾经用Eclipse创建的Web项目的问题.以下将讲一下使用maven搭建多模块的J2ee项目,以及採用这样的方式搭建项目对日后项目的水平拆分和垂直 ...

  7. JS排序

    冒泡排序 https://sort.hust.cc/1.bubbleSort.html 选择排序 https://sort.hust.cc/2.selectionSort.html 插入排序 http ...

  8. Azure: 给 ubuntu 虚机挂载数据盘

    在 azure 上创建的虚机默认会分配两个磁盘,分别是系统盘和一个临时磁盘.如果我们要在系统中安装使用 mysql 等软件,需要再创建并挂载单独的数据盘用来保存数据库文件.这是因为临时磁盘被定义为:用 ...

  9. 十三、 Spring Boot 启动加载数据 CommandLineRunner

    实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求. 为了解决这样的问题,spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来 ...

  10. python filter map reduce

    filter(function, iterable): Construct a list from those elements of iterable for which function retu ...