`

Python之三(对象)

阅读更多

Python 使用对象模型来存储数据。构造任何类型的值都是一个对象。

 

对象的三个特性

1、身份:可以通过内建函数id()来得到对象唯一的身份标识。这个值可以被认为是该对象的内存地址。

import logging
print id(logging)      #输出:12054096

       2、类型:对象的类型决定了该对象可以保存什么类型的值,可以用内建函数type()查看Python 对象的类型。

name = 'zhangsan'
print type(name)     #输出:<type 'str'>

因为在Python 中类型也是对象,所以type()返回的是对象而不是简单的字符串。      

3、值:对象表示的数据项

 

基本数据类型

数字(分为几个子类型,其中有三个是整型)、整型、布尔型、长整型、浮点型、复数型、字符串、列表、元组、字典

其他内建类型

类型、Null 对象 (None)、文件、集合/固定集合、函数/方法、模块、类

 

布尔值

None和False以及所有值为0的数或者表达式,他们的布尔值都是False,除此之外的值的布尔值都是True

 

对象值比较

比较运算符用来判断同类型对象的值是否相等,所有的内建类型均支持比较运算,比较运算返回布尔值 True 或 False

等于(==),大于等于(>=),小于等于(<=),不等于(!=)

 

对象本身比较

也就是通常所说的对象引用的比较,返回布尔值 True 或 False

等于(is),不等于(is not)

a = b =1
print a is b                             #True
print id(a) == id(b)                 #等价于a is b
print a is not b                       #False
 

逻辑运算符

逻辑非(not)、逻辑与(and)、逻辑或(or)

 

常见内置函数

函数名 功能
cmp(obj1,obj2)

比较 obj1 和 obj2, 根据比较结果返回整数 i:

i < 0 if obj1 < obj2

i > 0 if obj1 > obj2

i == 0 if obj1 == obj2

repr(obj) 返回一个对象的字符串表示
str(obj) 返回对象适合可读性好的字符串表示
type(obj) 得到一个对象的类型,并返回相应的type 对象

 

str()和 repr()的区别

内建函数 str() 和 repr() 可以方便的以字符串的方式获取对象的内容、类型、数值属性等信息。
str()函数得到的字符串可读性好,但它返回结果通常无法用于eval()求值,但很适合用于 print 语句输出,

一个类(class)可通过 __str__() 成员控制其行为。该成员不存在,则使用其 __repr__() 成员。
而repr()函数返回一个可以用来表示对象的可打印字符串, 通常情况下 obj == eval(repr(obj)) 这个等式是成立的。
但并不是所有repr()返回的字符串都能够用eval()内建函数得到原来的对象,记住这一点。

一个类(class)可以通过 __repr__() 成员来控制repr()函数作用在其实例上时的行为。


特殊的操作符``

repr() 和 `` 做的是完全一样的事情,Python 社区目前已经不鼓励继续使用``运算符,而且使用repr()函数相对来说有更多的优势,除了使用起来意义更明确意外,函数名还可以作为别的函数的参数和返回值使用。

 

type() 和 isinstance()

他们就类似于Java中Class类型和对象实例的关系。type()返回对象属于什么类型,isinstance()则返回某个对象是不是某个类型的实例。

 

cmp()

内建函数cmp()用于比较两个对象obj1 和obj2, 如果obj1 小于obj2, 则返回一个负整数,如果obj1 大于obj2 则返回一个正整数, 如果obj1 等于obj2, 则返回0。如果是用户自定义对象, cmp()会调用该类的特殊方法__cmp__()。

类似于Java中的compareTo()方法。

 

类型工厂函数
Python 2.2 统一了类型和类, 所有的内建类型现在也都是类, 在这基础之上, 原来的所谓内建转换函数象int(), type(), list() 等等, 现在都成了工厂函数。 也就是说虽然他们看上去有点象函数, 实质上他们是类的工厂方法。当你调用它们时, 实际上是生成了该类型的一个实例。

python中的类型工厂函数,有以下一些:

int(),long(),float(),complex(),str(),unicode(),basestring(),list(),tuple(),type()

dict(),bool(),set(),frozenset(),object(),classmethod(),staticmethod(),super(),property(),file()

 

可变与不可变类型

可变类型即对象的值是可以被改变的,即变量在内存中的地址是没有被改变的,只是单纯的值变化啦。

不可变类型即对象的值是不可以被改变的,即值被改变的同时,他们在内存中的地址是改变了的,而指向了新的值的引用。

可以通过内建函数id()来确认对象的身份在两次赋值前后发生了变化。 新创建的对象被关联到原来的变量名, 旧对象被丢弃,垃圾回收器会在适当的时机回收这些对象。这同Java中的常量池的处理方式是一样的。

分类 python类型
可变类型 列表、字典
不可变类型 数字、字符串、元组

 

python标准类型分类

数据类型 存储模型 更新模型 访问模型
数字 Scalar 不可更改 直接访问
字符串 Scalar 不可更改 顺序访问
列表 Container 可更改 顺序访问
元组 Container 不可更改 顺序访问
字典 Container 可更改 映射访问

 

python不支持的数据类型

Python 没有 char 或 byte 类型来保存单一字符或8 比特整数。你可以使用长度为1 的字符串表示字符或8 比特整数。Python 没有指针,因为你不用自己来管理内存,因此没有必要访问指针。在Python 中你可以使用id()函数得到一个对象的身份号, 这是最接近于指针的地址。其实在Python 中, 一切都是指针。

 

int 、short、long

Python 的普通整数相当于标准整数类型,不需要类似C 语言中的 int, short, long 这三种整数类型。事实上Python 的整数实现等同于C 语言的长整数。 由于Python 的整型与长整型密切融合, 用户几乎不需要担心什么。 你仅需要使用一种类型, 就是Python 的整型。即便数值超出整型的表达范围, 比如两个很大的数相乘, Python 会自动的返回一个长整数给你而不会报错。

 

float、double
C 语言有单精度和双精度两种浮点类型。Python 认为同时支持两种浮点类型的好处与支持两种浮点类型带来的开销不成比例,所以Python 不支持单精度浮点数,Python 的浮点类型实际上是C 语言的双精度浮点类型。。对那些宁愿放弃更大的取值范围而需要更高精确度的用户来说, Python 还有一种十进制浮点数类型 Decimal, 不过你必须导入decimal 模块才可以使用它。浮点数总是不精确的。Decimals 则拥有任意的精度。在处理金钱这类确定的值时,Decimal 类型就很有用。 在处理重量,长度或其它度量单位的场合, float 足够用了。

 

参考资料:

Python核心编程(第二版) 人民邮电出版社

分享到:
评论

相关推荐

    Python 3面向对象编程

    Python 是一种面向对象的解释型语言,面向对象是其非常重要的特性。《Python 3面向对象编程》通过Python 的数据结构、语法、设计模式,从简单到复杂,从初级到高级,一步步通过例子来展示了Python 中面向对象的概念...

    Python面向对象之类和对象实例详解

    本文实例讲述了Python面向对象之类和对象。分享给大家供大家参考,具体如下: 类和对象(1) 对象是什么? 对象=属性(静态)+方法(动态); 属性一般是一个个变量;方法是一个个函数; #类的属性 就是 类变量 #...

    Python3 面向对象编程

    Python 是一种面向对象的解释型语言,面向对象是其非常重要的特性。《Python 3面向对象编程》通过Python 的数据结构、语法、设计模式,从简单到复杂,从初级到高级,一步步通过例子来展示了Python 中面向对象的概念...

    python面向对象练习题.pdf

    #### 一、面向对象三大特性及作用 **1. 封装** 封装是面向对象编程中的一个重要概念,它通过隐藏类的内部细节并对外提供公共接口来保护数据的安全性和完整性。封装使得类的使用者不必关心类内部的具体实现,而只...

    python面向对象课件

    面向对象编程(Object-Oriented Programming,简称OOP)是Python编程中的核心概念之一,它是一种编程范式,强调通过创建对象来组织代码,使得程序更易于理解和维护。本课件详细介绍了Python中的面向对象特性,包括类...

    python面向对象

    在Python中,面向对象编程是其核心特性之一,允许开发者创建复杂、可维护的代码结构。 在Python中,面向对象有三大基本概念:类(Class)、对象(Object)和继承(Inheritance)。首先,类是对象的蓝图,定义了一组...

    Python3面向对象编程

    Python 是一种面向对象的解释型语言,面向对象是其非常重要的特性。《Python 3面向对象编程》通过Python 的数据结构、语法、设计模式,从简单到复杂,从初级到高级,一步步通过例子来展示了Python 中面向对象的概念...

    第七章Python对象和类习题及答案--中文

    Python 对象和类习题及答案中文 在本节中,我们将学习 Python 中的对象和类,并通过习题和答案来巩固相关知识点。 定义对象的类 在 Python 中,类是定义对象的模板或蓝图。类是定义相同类型对象的模板,蓝图或...

    Python+3面向对象编程.

    Python 是一种面向对象的解释型语言,面向对象是其非常重要的特性。《Python 3面向对象编程》通过Python 的数据结构、语法、设计模式,从简单到复杂,从初级到高级,一步步通过例子来展示了Python 中面向对象的概念...

    面向对象编程基础_python面向对象_python教程_

    在Python中,面向对象编程是其核心特性之一,使得Python成为了一种非常适合进行复杂系统开发的语言。下面我们将深入探讨Python中的面向对象编程基础。 一、类与对象 1. **类(Class)**:类是面向对象编程的基础,...

    2014年度辛星python面向对象教程

    在编写面向对象的Python程序时,需要注意面向对象的三大原则:封装、继承和多态。封装提供了一种隐藏对象内部状态和行为的方法,只对外提供必要的操作接口。继承是创建新类时,使新类继承已有类的特性和行为的能力,...

    Python 面向对象编程

    Python的面向对象编程是其强大的特性之一,它允许开发者通过创建和使用类来构建复杂的软件结构。面向对象编程(OOP)的核心理念是封装、继承和多态,这些概念在Python中得到了很好的实现。 1. **类的定义** 在...

    Python类型和对象.pdf

    Python 类型和对象 本文将详细介绍 Python 中的类型和对象,探讨新式对象(new-style)和用户定义的类及实例之间的关系,以及它们与内置类型的关系。 基本概念 在 Python 中,每个对象都是一个实体的体现,可以...

    Python中字典对象的嵌套和查询示例

    使用环境:需要先安装PyCharm(请自己百度下载安装),以及然后官网上下载Python 2.7版本,以及Python 3.7版本后,安装在自己的电脑上。...目的:帮助理解字典对象嵌套和查询在Python中的具体使用。

    Python 面向对象(基础篇).pdf

    Python面向对象编程基础篇 Python面向对象是指一种编程思想和方法,它强调将问题域中的对象和概念抽象化,定义类和对象,并使用它们来描述和解决问题。Python面向对象编程是一种编程思想和方法,它强调将问题域中的...

    Python类型和对象(20210930180213).pdf

    此外,文档还涉及了Python对象的内存表示,即每个对象在主内存中的确切位置可以通过调用`id()`函数找到。这为那些喜欢深入了解如何实现细节而不是仅仅了解抽象概念的人提供了一个了解内存布局的途径。 文档提到了...

Global site tag (gtag.js) - Google Analytics