PYTHON 学习教程资源:继承和多态操作代码练习 PYTHON 学习教程资源:继承和多态操作代码练习是 OOP 程序设计中的一种重要概念。在 OOP 程序设计中,当我们定义一个 class 的时候,可以从某个现有的 class 继承,新的 class 称为子类(Subclass),而被继承的 class 称为基类、父类或超类(Base class、Super class)。 继承的好处 ---------- 继承有什么好处?最大的好处是子类获得了父类的全部功能。由于 Animal 实现了 run() 方法,因此,Dog 和 Cat 作为它的子类,什么事也没干,就自动拥有了 run() 方法: ``` dog = Dog() dog.run() cat = Cat() cat.run() ``` 运行结果如下: ``` Animal is running... Animal is running... ``` 多态 ---- 继承的第二个好处需要我们对代码做一点改进。你看到了,无论是 Dog 还是 Cat,它们 run() 的时候,显示的都是 Animal is running...,符合逻辑的做法是分别显示 Dog is running... 和 Cat is running...,因此,对 Dog 和 Cat 类改进如下: ``` class Dog(Animal): def run(self): print('Dog is running...') class Cat(Animal): def run(self): print('Cat is running...') ``` 再次运行,结果如下: ``` Dog is running... Cat is running... ``` 当子类和父类都存在相同的 run() 方法时,我们说,子类的 run() 覆盖了父类的 run(),在代码运行的时候,总是会调用子类的 run()。这样,我们就获得了继承的另一个好处:多态。 数据类型 ------ 要理解什么是多态,我们首先要对数据类型再作一点说明。当我们定义一个 class 的时候,我们实际上就定义了一种数据类型。我们定义的数据类型和 Python 自带的数据类型,比如 str、list、dict 没什么两样: ``` a = list() # a 是 list 类型 b = Animal() # b 是 Animal 类型 c = Dog() # c 是 Dog 类型 ``` 判断一个变量是否是某个类型可以用 isinstance() 判断: ``` >>> isinstance(a, list) True >>> isinstance(b, Animal) True >>> isinstance(c, Dog) True ``` 看来 a、b、c 确实对应着 list、Animal、Dog 这 3 种类型。但是等等,试试: ``` >>> isinstance(c, Animal) True ``` 看来 c 不仅仅是 Dog,c 还是 Animal!不过仔细想想,这是有道理的,因为 Dog 是从 Animal 继承下来的,当我们创建了一个 Dog 的实例 c 时,我们认为 c 的数据类型是 Dog 没错,但 c 同时也是 Animal 也没错,Dog 本来就是 Animal 的一种! 多态的好处 ---------- 要理解多态的好处,我们还需要再编写一个函数,这个函数接受一个 Animal 类型的变量: ``` def run_twice(animal): animal.run() animal.run() ``` 当我们传入 Animal 的实例时,run_twice() 就打印出: ``` >>> run_twice(Animal()) Animal is running... Animal is running... ``` 这就是多态的好处。我们可以传入不同的实例,run_twice() 函数就会根据实例的类型来执行不同的行为。 在实际应用中,我们可以使用继承和多态来编写更加灵活和可扩展的代码。比如,在游戏开发中,我们可以定义一个基类 Character,继承它的是 Warrior、Mage、Archer 等子类,每个子类都有自己的特点和行为。但是,当我们需要编写一个函数来处理所有类型的 Character 时,我们可以使用多态来实现: ``` def attack(character): character.attack() ``` 这样,无论是 Warrior、Mage 还是 Archer,我们都可以使用同一个函数来处理它们。
剩余7页未读,继续阅读
- 粉丝: 26
- 资源: 6445
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助