【Python】什么是python对象

python使用对象模型来存储数据,也就是说构造任何类型的值都是一个对象。所有的python对象都拥有三个特性:身份id,类型和值。

身份id唯一的身份标识,可以使用内建函数id()来得到,这个值可以被认为是该对象的内存地址。对象身份的比较可通过运算符isis not来完成,判断它们是否指向(引用)同一个对象,这里举一个有趣的例子:

>>> a = 1
>>> b = 1
>>> c = 1000
>>> d = 1000
>>> a is b
True
>>> c is d
False
>>> id(a), id(b), id(c), id(d)
(11258984, 11258984, 12386056, 11594792)

可以看出,ab指向同一个对象,但cd却不同,这是为什么呢?这是因为,整数对象和字符串对象是不可变对象,python会很高效的缓存它们,不过整数对象仅缓存简单整数,如上面例子中的11000就不会缓存了。例子中,a is b等价于id(a) == id(b)。

类型:对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则,可以用内建函数type()查看python对象的类型,也可以用isinstance(),在python中类型也是对象。python有一系列的基本(内建)数据类型,其标准类型(基本数据类型)包括数字、整型、布尔型、长整型、浮点型、复数型、字符串、列表、元组和字典,还有一些其它的内建类型,它们是类型(类型本身也是类型)、Null对象(None,对应的布尔值为False,所有值为零的数的布尔值都是False,如整型、浮点型、长整型、复数、空字符串、空列表、空元祖、空字典等,而且定义了__nonzero__或__len__且值为0的类实例的布尔值也是False)、文件、集合、函数、模块和类,除此之外还包括一些内部类型,即代码(使用内建函数compile可以得到代码对象,然后可以被exec命令或eval内建函数来执行)、帧(包含python解释器在运行时所需要知道的所有信息)、跟踪记录(常用于异常)、切片(包括步进切片、多维切片、省略切片,可以由内建函数slice来生成)、省略(省略对象用于扩展切片语法中,起记号作用,表示省略号,有一个唯一的名字Ellipsis,布尔值为True)、Xrange(由内建函数xrange生成,是range的补充,前者用于需要节省内存使用或range无法完成的超大数据集场合)。types是一个与python类型相关的模块。

值:对象表示的数据项。布尔逻辑运算符包括and、or、not,对象值的比较除了一些常见的运算符(< > <= >= == !=)之外,还可以使用cmp()内建函数,如果是用户自定义对象,cmp()对调用该类的特殊方法__cmp__()。对于字符串来说,内建函数str(obj)返回对象适合可读性好的字符串表示,而另一个内建函数repr(obj)返回一个对象的字符串表示,通常情况下obj == eval(repr(obj))这个等式是成立的。可以这么说,repr()的输出对python比较友好,str()的输出对人比较友好。

某些python对象有属性、值或相关的可执行代码,比如方法(method),python用点(.)标记法来访问属性,属性包括相应对象的名字等等,最常用的属性是函数和方法,不过有一些python类型也有数据属性,含有数据属性的对象包括(但不限于)类、类实例、模块、复数和文件等。

上面提到的类型可按照三种不同的模型进行分类:存储模型、更新模型、访问模型。

存储模型分两种——

原子类型(标量类型):数值(所有的数值类型)、字符串(全部是文字)。

容器类型:列表、元组、字典。

更新模型分两种——

可变类型:列表、字典。

不可变类型:数字、字符串、元组。

访问模型分三种——

直接访问:数字。

顺序访问:字符串、列表、元组。

映射访问:字典。

最后,说明一下python的类型工厂函数,新式的python统一了类型和类,所有的内建类型现在也都是类,在这基础上,原来的所谓内建转换函数像int()、type()、list()等等,现在都成了工厂函数,也就是说虽然他们看上去有点像函数,实质上它们是类,当你调用它们时,实际上是生成了该类型的一个实例,就像工厂生产货物一样。下面的工厂函数在老的python里被称为内建函数:

int() long() float() complex()

str() unicode() basestring()

list() tuple()

type()

新添加的工厂函数:

dict()

bool()

set() frozenset()

object()

classmethod()

staticmethod()

super()

property()

file()


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值