学习和使用过面向对象的程序设计概念的朋友们应该非常了解在面向对象的语言中,对象(objects)是什么。如果
你现在还不了解面向对象的程序设计概念,那么先请阅读下面的文章。
言归正传,今天我们要学习的是Python的中对象(Objects)。Python的官方文档是这样描述Python中的对象的。
Objects are Python’s abstraction for data. All data in a Python program is represented by objects
or by relations between objects.
Python把所有的一切都认为是对象(Objects), 这就是那句著名的话 "Everything is an object in Python"。实际上,
对象(Objects)是Python对于数据的一种抽象。在Python程序中,所有的数据都是通过对象或者对象之间的关系
来表示的。 Python中的对象有由三个部分组成: 标示(identity),类型(type)和值(value)。
每一个对象都是唯一的。我们可以用对象的标示(identity)来比较两个对象,即使用 is 语句。我们可以把对象的标
示(identity)看做是对象在内存中的地址。当一个对象一旦被创建,它的标示(identity)将不再改变直到这个对象
消失。当对象消失后,它的标示(identity)将会被释放,并可能被未来的一个对象来使用。所以,对象的标示是唯一
的,不变的,并存在于对象的整个生命周期。为了更形象的说明什么是对象的标示(identity),我们可以用Python中
内建函数id()来返回一个对象的标示(identity)。
# For CPython, id(x) is
the memory address where x is stored.
-
>>> print id.__doc__
-
id(object) -> integer
-
-
Return the identity of an object. This is guaranteed to be unique among
-
simultaneously existing objects. (Hint: it's the object's memory address.)
-
>>>
-
>>> id('a')
-
4294254320L
-
>>> id(1)
-
2147602984L
-
>>> id(True)
-
1736287728
说的直白些,对象的标示(identity)其实就是一个整数,它是对象在内存中的地址。
对象的类型(type)则决定了对象支持什么样的操作和运算,可以被赋予什么样的值。 内建函数type()返回的
是当前所给对象的类型。同对象的标示(identity)一样,类型(type)也是不可变的【1】 。
-
>>> print type.__doc__
-
type(object) -> the object's type
-
type(name, bases, dict) -> a new type
-
>>>
-
>>> type('a')
-
<type 'str'> # 对象 'a' 的类型是‘str’
-
>>> type(1)
-
<type 'int'> # 对象 1 的类型是‘int'
-
>>> type(None)
-
<type 'NoneType'> # 对象None是Python里一个特殊的对象,它有个专门的类型 ‘NoneType'
-
>>> type(True)
-
<type 'bool'> # 对象 True 的类型是 ’bool‘
-
>>>
-
>>> type(int) # int类型的类型是类型。
-
<type 'type'>
-
>>> type(bool) # bool类型的类型是类型。
-
<type 'type'>
-
>>> type(type) # type类型的类型还是类型。
-
<type 'type'>
-
>>>
对象的是值本身也是一个对象,且它和对象有同样的的类型(type)。有些对象的值是可变的,有些对象的值
是不可变的。我们把那些值可以变化的对象叫做可变对象(mutable objects),把那些值不可变的对象叫做不
变对象(immutable objects)。一个对象的易变性(mutability)是由这个对象的类型(type)来决定的。
比如,数字(numbers),字符串(strings),元组(tuples)是不可变的,而字典(dictionaries),列表(lists )
是可变的。
对象从来不会显示地消失,如果某个对象不再被使用后,它们会在垃圾回收后变的不可以用。
至此,我们已经对Python对象有了基本的了解。下次,我们将深入讲解Python对象的一些特性。敬请期待!
By Harrison Feng
阅读(5868) | 评论(2) | 转发(1) |