一、类
类有自己的变量、函数、方法等,每个类都默认的有构造函数__init__和析构函数__del__,而且在调用的时候默认的先调用构造----一般方法-------析构函数__del__
#coding=utf-8 class Person: def __init__(self,name,age): self.name=name self.age=age print u'我是类的构造方法'#类实例化的对象,调用类的方法的时候,默认会先调用init, # 再调用要调用的方法,最后也会默认调用类的析构方法 __del__ #实例化类的时候,如果init有参数,那么实例化时要必须带这些参数 def eat(self): print u'我是类的eat方法' print 'my name is{0},my age is {1}'.format(self.name,self.age) def setName(self,name): self.name=name def getName(self): return self.name def __del__(self): print u'我是类的析构方法' per=Person('Lida',20) per.eat() per.setName('yaya') print per.getName()
运行结果:
我是类的构造方法 我是类的eat方法 my name isLida,my age is 20 yaya 我是类的析构方法
二、python继承的规则 从左到右,由下至上
1、从左到右指的是一个类class1可以同时继承多个类(class2,class3,class4),在调用类中的方法时,调用顺序为class2---》class3----》class4,示例代码:
class Animal1(object): def grow(self): print u'我是第一个Animal类的方法' def eat(self): print u'开始吃饭' def drink(self): print u'开始喝水' class Animal2(object): def grow(self): print u'我是第二个Anima2类的方法' class tiger(Animal2,Animal1): def walk(self,name): self.name=name print u'{0}在走路'.format(self.name) ti=tiger() ti.grow() ti.walk('panda'
执行结果如下:
tiger(Animal2,Animal1)运行结果:
我是第二个Anima2类的方法-------------#调用Animal2的
panda在走路
tiger(Animal1,Animal2)运行结果:
我是第一 个Anima1类的方法----------------#调用Animal1的
panda在走路
2、由下至上指的是如果子类复写了父类的方法,那么在调用的时候,调用的是子类的这个方法,示例代码如下:
class Animal(object): def drink(self): print u'Animal开始喝水' class Dog(Animal): def wang(self): print u'小狗汪汪叫' class Cat(Animal): def miao(self): print u'小猫喵喵叫' def drink(self): print u'小猫在喝水'#子类复写了父类的方法,调用时调子类 cat=Cat() cat.drink() cat.miao() dog=Dog() dog.drink()
执行结果:
小猫在喝水
小猫喵喵叫-------------#Cat复写了父类的drink方法
Animal开始喝水-------#Dog没有复写,直接调用父类的drink方法
三、反射
1、主要用到俩个函数:getattr(x, 'y'):获取对象x的成员y;hasattr(x, 'y'):判断对象x的成员y是否存在
示例代码3.1:fanshe.py
#coding=utf-8 class Obj(object): def __init__(self,name): self.name=name def show(self): pass obj=Obj('panda') print "getattr(x, 'y'):获取对象x的成员y:", getattr(obj,'name') print "hasattr(x, 'y'):判断对象的成员是否存在:",hasattr(obj,'show')
运行结果:
getattr(x, 'y'):获取对象x的成员y: panda
hasattr(x, 'y'):判断对象的成员是否存在: True
2、应用
示例代码3.2:查看判断3.1中fanshe.py模块中是否存在某个类,存在的话输出其某个元素
#coding=utf-8 def exit(modelName,className): m=__import__(modelName,fromlist=True)#m是导入的模块 if hasattr(m,className): class_name=getattr(m,className)#获取模块的类 lei1=class_name('panda')#实例化获取到的类 print getattr(lei1,'name') print hasattr(lei1,'show') else : print u'模块中不存在这个类' exit('fanshe','Obj')
运行结果如下:
getattr(x, 'y'):获取对象x的成员y: panda------------------------#导入模块后,程序就开始运行此模块,所以才会输出这俩句
hasattr(x, 'y'):判断对象的成员是否存在: True-----------------#导入模块后,程序就开始运行此模块,所以才会输出这俩句
panda
True