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__可以看到对象的所有属性。

小结

类的定义和使用在面向对象编程中是一重要的内容, 应该熟练掌握. 进一步有关类和面向对象的资料如下:


::Lizzie [2008/06/24 13:24:00]

Name Password4deL ;) :( X-( B-)