====== 类的基本概念 ====== ---- * 类是一个对象 * 类可以有自己的属性,函数 * 实例是类对象通过__init__函数创建出来的一个对象, * 可以调用类对象的属性,函数。 * 也可以知己覆盖类对象的属性,函数 * 类对象,实例对象都可以动态生成属性,函数 mod1.py class mod1: def origin(self): print "this is mod1 only" def show(self): print "mod1" mod2.py 所有_ _xx_ _的函数都是类的钩子函数,当某些操作被触发的时候调用 from mod1 import mod1 class mod2(mod1): #继承mod1类 def __init__(self): #初始化函数,这里可以声明类的属性。python中属性是动态建立的,只要被赋值就会被创建 self.count=10 def __add__(self,data): # 当类做加法的时候回自动调用这个函数 print str(self.count)+" + "+str(data)+" = "+str(self.count+data) def show(self): self.name='fang' #创建一个类的属性,其实只要被赋值就会自动创建 print "mod2" def __str__(self): #当实例被内置函数str调用时触发 return "str function is called" def test(self): print "test" mod2.testFun = test #动态创建函数 main.py #!/usr/bin/python from mod2 import mod2 m=mod2() m.origin() #调用mod2的父类 m.show() #mod2重载了mod1的show函数 m+1 #测试+重载 m.testFun() #调用动态函数 print str(m) #此时str重载 class s:pass #定义一个临时类 s.name='fang' #给类加了一个属性。这句话合法,因为类也是一个对象 print s.name ss=s() #新建一个实例 s.name='qiang' print ss.name #结果是"qiang"。实例ss其实并没有name属性,只是从类对象中读取罢了 ---- ====== 运算符重载 ====== 方法 重载 触发 __init__ 构造函数 X=Class() __del__ 析构函数 对象销毁 __add__ + X+Y,X+=Y __or__ | X|Y,X|=Y __repr__ 打印转换 print X,repr(X) __str__ 打印转换 print X,str(X) __call__ 调用函数 X() __getattr_ 限制 X.undefine __setattr__ 取值 X.any=value __getitem__ 索引 X[key], __len__ 长度 len(X) __cmp__ 比较 X==Y,X ====== 类的特殊属性 ====== C.__name__ C.__doc__ C.__bases__ C.__dict__ C.__module__ C.__class__ 类C的名字(字符串) 类C的文档字符串 类C的所有父类构成的元组 类C的属性 类C定义所在的模块(1.5 版本新增) 实例C对应的类(仅新式类中) ====== 实例的特殊属性 ====== I.__class__ 实例化 I 的类 I.__dict__ I 的所有属性 ====== 类的多继承 ====== class a(object):pass class b(a):pass class c(a):pass class d(b,c):pass print d.__mro__ 结果: (, , , , ) d -> b -> c -> a (按继承顺序广度搜索)