http://docs.python.org/2/tutorial/classes.html
从C++的角度来讲,所有的python的成员都是public的,且所有的函数都是virtual的,除了在申明变量的时候以"__"双划线这个符号开头,就是说明是private的。
1)对象的copy赋值
python同样有aliasing的问题,aliasing就相当于指针指向同一个对象, 下面一段代码介绍了别名和正真copy的区别,一般对象的赋值就是直接用别名来完成的,基本类型除外。
shoplist = ['apple', 'mango', 'carrot', 'banana']
mylist = shoplist # mylist is just another name pointing to the same object!
mylist = shoplist[:] # make a copy by doing a full slice
如果要实现正真的copy,就参考下面的代码,实现可浅copy和深copy
>>> a = [[1], ['a'], ['A']]
>>> import copy
>>> b = copy.deepcopy(a)
>>> b
[[1], ['a'], ['A']]
>>> c = copy.copy(a)
>>> c
[[1], ['a'], ['A']]
>>> a[1].append('b')
>>> a
[[1], ['a', 'b'], ['A']]
>>> b
[[1], ['a'], ['A']]
>>> c
[[1], ['a', 'b'], ['A']]
2)class的定义
>>> class Complex:
... def __init__(self, realpart, imagpart):
... self.r = realpart
... self.i = imagpart
...
>>> x = Complex(3.0, -4.5)
>>> x.r, x.i
(3.0, -4.5)
这个class还有一个构造函数__init__,这个函数当系统申明对象的时候自动调用,比如 x=Complex(1,2), 另外我们看到类的function还有一个特点在类的方法必须有个额外的第一个参数 (self ),但在调用这个方法的时候不必为这个参数赋值,self在Python里不是关键字。self代表当前对象的地址。self能避免非限定调用造成的全局变量。
3) class 的继承
class支持多重继承
class DerivedClassName(Base1, Base2, Base3):
<statement-1>
.
.
.
<statement-N>