status |
校对 |
|
完成度100% |
PCS111 类
概述
在 Python 中通过关键字class定义一个类, 后面加上类名, 在类中可以定义类成员和类方法.自定义的类也可以继承现有的类, Python中类的继承也有单继承和多继承.
使用
类定义
自定义的类是类似于下面的形式:
In [1]: class A(object):
...: """This is Class A"""
...: def __init__(self, a):
...: self.a = a
...:
In [2]: class B(object):
...: """This is Class B"""
...: def __init__(self, b):
...: self.b = b
In [3]: print B.__dict__
{'__dict__': <attribute '__dict__' of 'B' objects>, '__module__': '__main__', '__weakref__': <attribute '__weakref__' of 'B' objects>, '__doc__': 'This is Class B', '__init__': <function __init__ at 0x842ed14>}
这个小例子中,关键字class定义了两个类:A和B分别是类名字,他们都继承了object类(这个是最基类,Python 中所有的class都是从object继承而来,也可以不写)。和函式一样,class也可以定义文档字符串,同样是通过__doc__访问。和许多语言不同的是,Python 中构造函式叫做__init__,第一个参数传递的就是将要初始化的实例对象本身,类似许多语言中的this。同样也有类似的析构函式叫做__del__。
构造函式中的self.a = a 便给self这个对象增加了一个名为a的属性,其绑定的对象就是传入的参数a所绑定的对象。对象的__dict__属性可以查看对象的所有属性。在任何时候都可以给对象增加属性,只需要给不存在的属性绑定对象即可,Python会自动创建不存在的属性。
类也可以有自己的属性。
In [4]: class A(object): ...: """This is Class A""" ...: aa = 'sth' ...: def __init__(self, a): ...: self.a = a ...: In [5]: A.aa Out[5]: 'sth'
同样也可以通过 类名.类属性名 的形式访问类属性。
类中方法的定义。
In [7]: class A(object): ...: """This is Class A""" ...: aa = 'sth' ...: def __init__(self, a): ...: self.a = a ...: def do_sth(self): ...: pass
类中的方法和普通的函式定义是类似的。
类继承
Python中允许单继承和有限的多继承。
In [13]: class C(A, B):
....: def __init__(self, a, b, c):
....: A.__init__(self,a)
....: B.__init__(self,b)
....: self.c = c
....:
In [18]: objc = C(1, 2, 3)
In [19]: objc.__dict__
Out[19]: {'a': 1, 'b': 2, 'c': 3}
如果所需要的一个属性在类C中没有找到,则依次从左到右,按A,B的顺序在基类中寻找。通过__dict__可以看到对象的所有属性。
小结
类的定义和使用在面向对象编程中是一重要的内容, 应该熟练掌握. 进一步有关类和面向对象的资料如下:
类与实例: http://wiki.woodpecker.org.cn/moin/ObpLovelyPython/LpyQLearn-5-object
精巧地址: http://bit.ly/36elwi
对象和面向对象: http://www.woodpecker.org.cn/diveintopython/object_oriented_framework/index.html#fileinfo.divein
精巧地址: http://bit.ly/1WOEJk
A First Look at Classes: http://www.python.org/doc/2.6/tutorial/classes.html
精巧地址: http://bit.ly/3VhOJ3
::Lizzie [2008/06/24 13:24:00]