之前关于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. MySQL 性能优化的最佳20多条经验分享(一)(转)

    当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这 ...

  2. yum中$releasever、 $basearch等变量含义

    [root@kickstart ~]# rpm -qf /etc/redhat-release centos-release--4.1708.el7.centos.x86_64 yum中的$relea ...

  3. Postgres是如何管理空值的

    创建表test,y字段插入null. test=# create table test(x bigint,y bigint,z text); CREATE TABLE test=# insert in ...

  4. 分享一些JAVA相关资源

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

  5. springmvc对于JSON对象的处理

    1.常见的json    jar包,及其优缺点(开发中可以一起使用) json-lib     缺点:依赖第三方的包 jackson SpringMVC内置的json装换工具,依赖包较少 GSON   ...

  6. 关于C语言中static保留字的使用

             static存储类型可以用于全部变量,无需考虑变量声明的位置.但是作用于块外部和块内部时具有不同的作用.         (1)当作用于函数内部时,和每次程序离开所在块就会丢失值的自 ...

  7. day1-Python入门

    百度云有关文档资料链接 链接:https://pan.baidu.com/s/1pLighnX 密码:j69s

  8. Android笔记二十四.Android基于回调的事件处理机制

        假设说事件监听机制是一种托付式的事件处理,那么回调机制则与之相反,对于基于回调的事件处理模型来说,事件源和事件监听器是统一的,或者说事件监听器全然消失了,当用户在GUI控件上激发某个事件时,控 ...

  9. UVA - 11082 Matrix Decompressing(最大流+行列模型)

    题目大意:给出一个R行C列的矩阵,如今给出他的前1-R行和 && 前1-C列和,问这个矩阵原来是如何的,要求每一个元素大小在1-20之间 解题思路:将每一行连接到超级源点,容量为该行的 ...

  10. python内置函数(四)

    python内部提供了非常多内建函数. 以下让我们从a-z開始学习python的内建函数 1.1 id(object) 返回对象的id(身份),返回的这个是一个整数(integer)是唯一的,在这个对 ...