封装
封装为一个大类,类中包含属性和方法
将属性和方法封装到一个抽象的类中外界使用类创建对象,然后让对象调用方法对象方法的细节都封装在类的内部
例题:
需求
1.小明体重75.0公斤
2.小明每次跑步会减肥0.5公斤
3.小明每次吃东西会增重1公斤
class Person:def __init__(self,name,weight):self.name = nameself.weight = weightprint('%s 的体重是 %.2f' %(self.name,self.weight))def run(self):self.weight -= 0.5return '%s 每次跑步体重会减少' %(self.name)def eat(self):self.weight += 1return '%s 吃东西体重增加' %(self.name)xiaoming = Person('小明',75)print(xiaoming.eat())结果:小明 的体重是 75.00小明 吃东西体重增加
1.士兵瑞恩有一把AK47
2.士兵可以开火(士兵开火扣动的是扳机)
3.枪 能够 发射子弹(把子弹发射出去)
4.枪 能够 装填子弹 --增加子弹的数量
class Gun:def __init__(self,model):self.model = modelself.bulletcount = 0def addbllet(self,count):self.bulletcount +=countdef shot(self):if self.bulletcount <= 0 :print('%s 没有子弹了' %s(self.model))returnself.bulletcount -=1print('%s还有%d个子弹' %(self.model,self.bulletcount))class Soldir:def __init__(self,name):self.name = nameself.gun = Nonedef fire(self):if self.gun ==None:print('%s 没有枪' %(self.name))returnself.gun.addbllet(50)self.gun.shot()ak47 = Gun('ak47')ryan = Soldir('ryan')ryan.gun = ak47ryan.fire()结果:ak47还有49个子弹
继承
继承:实现代码的重用,相同的代码不需要重复写子类继承父类,可以直接享受父类中已经封装好的方法子类应该根据职责,封装子类特有的属性和方法class Animal():def eat(self):print('吃~~~~~')def drink(self):print('喝')def run(self):print('跑')def sleep(self):print('睡')class Cat(Animal):def call(self):print('喵~')fentiao = Cat()fentiao.eat()fentiao.run()fentiao.call()结果:吃~~~~~跑喵~
如果子类重写了父类的方法
在运行中,只会调用在子类中重写的方法而不会调用父类方法
class Cat():def call(self):print('喵~')class HelloKitty(Cat):def speak(self):print('我能说英语')def call(self):print('@#@$@$@#@!#')kt = HelloKitty()kt.call()结果:@#@$@$@#@!#
如果子类重写父类的方法后,还想调用父类的方法
class Animal:def eat(self):print('吃')def drink(self):print('喝')def call(self):print('$$$$$')class Cat(Animal): #继承def call(self):super().call() #调用原本在父亲类的封装方法,如果没有这一行那么.call只有喵,会覆盖之前父类的print('喵')kt=Cat()kt.eat()kt.drink()kt.call()结果:吃喝$$$$$喵
子类可以继承父类的所有属性和方法
继承具有传递性,子类拥有父类的父类的属性和方法
class Animal():def eat(self):print('吃~~~~~')def drink(self):print('喝')def run(self):print('跑')def sleep(self):print('睡')class Cat(Animal):def call(self):print('喵~')class HelloKitty(Cat):def speak(self):print('我能说英语')class Dog(Animal):def bark(self):print('汪~')kt = HelloKitty()kt.eat()kt.speak()结果:吃~~~~~我能说英语
多态
以封装和继承为前提,不同的子类对象(两者之间要是继承关系),调用相同的方法
class Dog(object):def __init__(self,name):self.name=namedef game(self):print('%s 开心的玩' %(self.name))class Gaofei(Dog):def game(self):print('%s 和米老鼠一起玩'%(self.name))class Person(object):def __init__(self,name):self.name=namedef gamewith_dog(self,dog): #dog作为一个变量,而不是名称# self.dog=dogprint('%s和%s玩' %(self.name,dog.name))wangcai = Gaofei('高飞')dabai = Dog('大白')xiaoming = Person('小明')xiaoming.gamewith_dog(wangcai)xiaoming.gamewith_dog(dabai)结果:小明和高飞玩小明和大白玩
如果觉得《python——面向对象的三大特性:封装 继承 多态》对你有帮助,请点赞、收藏,并留下你的观点哦!