status |
校对 |
Lizzie |
完成度100% |
PCS105 对象
概述
Python中的一切东西都是对象,即,一切兼对象!
使用
对象定义
Python把任何数据抽象为对象。每个对象都有唯一的id,特定的类型和值。
- 每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函式id()来得到。这个值可以被认为是该对象的内存地址。
- 对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。可以使用内建函式type()查看Python对象的类型。注意:在Python中类型也是对象,所以type()返回的是对象而不是简单的字符串。
- 值则是对象的数据内容。
在创建一个对象后,其id不能改变,类型一般情况下不能改变,但对于某些特殊类是可以改变的,而值是可有可无并且也能动态改变。
Python有一系列的基本数据类型,这些基本数据类型同样也是对象。另外,也可以创建自定义类型,如下定义了两个类,分别叫A和B:
In [32]: class A(object): # 定义类A ....: pass ....: In [33]: class B(object): # 定义类B ....: pass ....: In [34]: a = A() # 类A的对象a In [35]: b = B() # 类B的对象b In [36]: type(a) # 查看对象a的类型为类A Out[36]: <class '__main__.A'> In [37]: type(b) # 查看对象b的类型为类B Out[37]: <class '__main__.B'>
a和b是两个属于不同类的对象。类A和B继承了object。Python中的object是最基类。
class object | The most base type
对象属性
不同的Python对象具有不同的属性和方法,可以使用点号.来访问属性。比如定义一个类Concept:
1 # -*- coding: utf-8 -*-
2
3 class Concept(object):
4 conceptNUM = 0 # 定义类变量
5
6 def __init__(self, extent=set(), intent=set()):
7 Concept.conceptNUM += 1
8 self.conceptID = Concept.conceptNUM # 以下三个变量是该类的数据成员
9 self.extent = extent
10 self.intent = intent
11
12 def addIntent(self, intentSet): # 以下2个自定义方法
13 self.intent = self.intent.union(intentSet)
14
15 def addExtent(self, extentSet):
16 self.extent = self.extent.union(extentSet)
17
18 def __str__(self):
19 return 'Concept %d: (%s), (%s)\n' % (self.conceptID, self.extent, self.intent)
20
21 if __name__ == '__main__':
22 cpt = Concept()
23 print 'Create: ', cpt
24 cpt.addIntent(set([1, 2, 3]))
25 print 'Add Intent: ', cpt
26 cpt.addExtent(set(['a', 'b']))
27 print 'Add Extent: ', cpt
28 print cpt.conceptID
可以看到在定义了类Concept之后,在主程序中创建一个对象cpt,之后使用.来调用其方法和属性。其运行结果:
~$ python pcs-105-1.py Create: Concept 1: (set([])), (set([])) Add Intent: Concept 1: (set([])), (set([1, 2, 3])) Add Extent: Concept 1: (set(['a', 'b'])), (set([1, 2, 3])) 1
这里涉及到Python中类的相关知识,在PCS111 类中有详细描述,在此略。
小结
对于Python对象,读者在学习过程中,一定要时刻记住一切类型皆是对象,对于如int等的基本数据类型也是对象,读者可以查看《Python源码剖析》来进一步了解Python中的对象机制。同时,在Python世界中,一切循环是迭代,一切对象是字典,一切命名是引用]。
一切循环是迭代,一切对象是字典,一切命名是引用: http://wiki.woodpecker.org.cn/moin/ZoomQuiet/2008-07-01
精巧地址: http://bit.ly/1MfiNV
Python Objects: http://www.effbot.org/zone/python-objects.htm
精巧地址: http://bit.ly/zpdxd
Objects, values and types: http://www.python.org/doc/current/ref/objects.html
精巧地址: http://bit.ly/3v2u3I
::Lizzie [2008/06/20 21:00:00]