面向对象的三大特点:
封装:将有一定功能的代码封装起来,使用时调用即可继承:将公共的属性和方法放在父类中,自己自考虑特有的属性和方法。多态:程序运行过程中,根据执行条件的不同,动态执行不同的操作代码的过程称为运行时多态。 一 封装 1.封装是面向对象编程的一大特点2.面向对象编程的第一步,将属性和方法封装到一个抽象的类中3.外界使用类创建对象,然后让对象调用方法4.对象方法的细节都被封装在类的内部封装的示例
zjdjr和cxdbd爱跑步
1.zjdjr体重75.0公斤
cxdbd体重45.0公斤
2.zjdjr每次跑步会减肥0.5公斤
3.zjdjr每次吃东西体重会增加1公斤
一个对象的属性可以是另外一个类创建的对象
示例需求
1.士兵ygdws有一把AK472.士兵可以开火(士兵开火扣动的是扳机)3.枪 能够 发射子弹(把子弹发射出去)4.枪 能够 装填子弹 --增加子弹的数量Soldier Gun--------- ------------name modelgun bullet_count---------- -------------__init__(self) __init__(self)fire(self) add_bullet(self,count) shoot(self) class Gun: def __init__(self, model): # 枪的型号 self.model = model # 子弹的数量 self.bullet_count = 0 def add_bullet(self,count): self.bullet_count += count # 只要子弹的数量足够,就能发射,所有shoot方法不需要传递参数 def shoot(self): # 1.判断子弹的数量 if self.bullet_count <= 0: print '[%s] 没有子弹了...' %self.model return # 2.发射子弹,子弹数量-1 self.bullet_count -= 1 # 3.提示发射信息 print '[%s] 突突突...[%d]' %(self.model,self.bullet_count)class Soldier: def __init__(self,name): self.name = name # 定义属性的时候,如果不知道设置什么初始值,可以设置为None # None关键字表示什么都没有,表示一个空对象,没有方法和属性 # 是一个特殊的常量,可以将None赋值给任何一个变量 self.gun = None def fire(self): # 1.判断士兵是否有枪 if self.gun == None: print '[%s] 还没有枪...' %self.name return print 'go!!! [%s]' %self.name self.gun.add_bullet(50) self.gun.shoot()# 1.创建枪对象ak = Gun('AK47')# 2.创建ygdws # 枪不能自己发射子弹,枪不能自己开火 需要士兵去完成ryan = Soldier('Ryan')ryan.gun = akryan.fire() 二 继承继承:实现代码的重用,相同的代码不需要重复的写
1 单继承
1.继承的概念:子类拥有父类的所有属性和方法(子类只需要封装自己特有的方法)2.语法class 类名(父类): def 子类特有的方法示例:
class Student: #定义父类 def study(self): print '学生要学习' def practice(self): print '学完要练习' def play(self): print '练习完要玩耍' def sleep(self): print '玩耍后睡觉觉'class homie(Student): # 子类拥有父类的所有属性和方法 def call(self): print '开黑'Bob = homie()Bob.study()Bob.practice()Bob.play()Bob.sleep()Bob.call()# 子类继承自父类,可以直接享受父类中已经封装好的方法
2 继承的传递性
3 重写父类和扩展
覆盖父类的方法(重写父类方法)
如果子类中,重写了父类的方法
在运行中,只会调用在子类中重写的方法而不会调用父类的方法
4 多继承
子类拥有一个父类叫作单继承
子类可以拥有多个父类,并且具有所有父类的属性和方法
例如:孩子会继承自己父亲和母亲的特征
三 多态
多态(以封装和继承为前提)
面向对象的三大特征:
1.封装:根据职责将属性和方法封装到一个抽象的类中
2.继承:实现代码的重用,相同的代码不需要重复的编写
子类针对自己特有的需求,编写特定的代码
3.多态:不同的子类对象调用相同的方法,产生不同的执行结果
1.多态可以增加代码的灵活度
2.以继承和重写父类的方法为前提
3.调用方法,不会影响到类的内部设计