面向对象(OOP)——继承、多态(5)

学习笔记来源于b站


目录

一、继承

1、单继承

2、多继承

3、新式类和旧式(经典)类

二、多态

三、案例


面向对象三大特性

  1. 封装  根据  职责  将  属性  和  方法  封装  到一个抽象的  类 
  2. 继承  实现代码的重用,相同的代码不需要重复的编写
  3. 多态  不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度

一、继承

继承:子类  拥有  父类  的所有的方法和属性

1、单继承

class 类名(父类名):
    pass
  • 子类  继承  父类,可以直接  享受  父类中已经封装好的方法,不需要再次开发
  • 子类  中应该根据  职责,封装  子类特有的属性和方法
  • 子类或者叫做派生类,父类或者叫做基类,继承或者叫做派生
  • 继承具有传递性:子类  具有  父类以及父类的父类 中封装的所有的  属性和方法
  • 当  父类  的方法不能满足子类的需求的时候,可以对方法进行重写(override)

  • 重写父类有两种方法:覆盖父类的方法、对父类方法进行  扩展

2、多继承

class 类名(父类名1,父类名2,...):
    pass
  • 子类  可以拥有 多个父类,并且具有 所有父类的属性和方法

  • 如果 不同的父类 中存在 同名的方法,应该尽量避免这样的情况

3、新式类和旧式(经典)类

object 是 python 为所有对象提供的 基类,提供所有一些内置的属性方法,可以使用dir函数查看

  • python 2.x 与 python 3.x 定义类时会有区别,如果没有父类,建议统一继承自object

二、多态

不同 子类 对象 调用 相同的父类

多态 以 继承 和 重写父类方法 为前提,是调用的技巧,不会影响类内部设计

三、案例

需求

在 Dog 类中封装方法 game

  • 普通狗只是简单的玩耍

定义 XiaoTianDog 继承自 Dog,并且重写 game 方法

  • 哮天犬需要在天上玩耍

定义 Person 类,并且封装一个 和狗玩 的方法

  • 在方法内部,直接让 狗对象 调用 game 方法

class Dog(object):
    
    def __init__(self,name):
        self.name = name
        
    def game(self):
        print("%s jump and down!!!"%self.name)

class xiaotianDog(Dog):
    
    def game(self):
        print("%s fly in the sky!!!"%self.name)
        
class Person(object):
    
    def __init__(self,name):
        self.name = name
        
    def game_with_dog(self,dog):
        
        print("%s play with %s"%(self.name,dog.name))
        dog.game()
        
wangcai = Dog("旺财")
xiaotian = xiaotianDog("哮天汪")
xiaoming = Person("小明")

xiaoming.game_with_dog(wangcai)

xiaoming.game_with_dog(xiaotian)

#输出
小明 play with 旺财
旺财 jump and down!!!
小明 play with 哮天汪
哮天汪 fly in the sky!!!

乘客坐飞机拍到日环食   2020日环食各地观测时间.jpg

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值