Python多态案例练习:普通狗玩耍,哮天犬在天上玩耍
时间: 2024-03-06 11:13:40 浏览: 33
在Python中,可以通过多态来实现不同对象对同一个方法的不同实现。下面我们来看一个关于普通狗和哮天犬玩耍的多态案例练习。
首先,我们定义一个基类`Dog`,其中有一个`play()`方法用于表示狗的玩耍行为。
```python
class Dog:
def play(self):
print("普通狗在地上玩耍")
```
接下来,我们定义一个继承自`Dog`的子类`SkyDog`,并在该子类中重写`play()`方法,表示哮天犬在天上玩耍。
```python
class SkyDog(Dog):
def play(self):
print("哮天犬在天上玩耍")
```
现在,我们可以创建普通狗和哮天犬的对象,并调用它们的`play()`方法,观察它们的不同行为。
```python
dog = Dog()
sky_dog = SkyDog()
dog.play() # 普通狗在地上玩耍
sky_dog.play() # 哮天犬在天上玩耍
```
通过多态,我们可以看到不同对象对同一个方法的不同实现结果。普通狗调用`play()`方法时输出"普通狗在地上玩耍",而哮天犬调用`play()`方法时输出"哮天犬在天上玩耍"。
这就是一个简单的使用多态的案例练习,通过继承和方法重写,我们可以实现不同对象对同一个方法的不同实现,从而实现更灵活和可扩展的代码结构。
相关问题
dclass Dog:ef game(self): print('普通狗简单的玩耍...') class XTQ(Dog): def game(self): print('哮天犬在天上玩耍...') class Person: def play_with_dog(self, dog): """dog 是狗类或者其子类的对象""" print('人和狗在玩耍...', end='') dog.game() if __name__ == '__main__': dog1 = Dog() xtq = XTQ() xw = Person() xw.play_with_dog(dog1) xw.play_with_dog(xtq)在这个程序中,多态是什么,请讲解一下多态
在这个程序中,多态指的是在父类 Person 的 play_with_dog 方法中接受一个参数 dog,这个参数可以是 Dog 类或其子类的对象。由于 XTQ 类是 Dog 类的子类,因此可以将 XTQ 类的对象 xtq 传递给 play_with_dog 方法。
当调用 play_with_dog 方法时,无论传入的是 Dog 类的对象还是 XTQ 类的对象,都可以正确执行对应对象的 game 方法。这是因为在 Dog 和 XTQ 类中都定义了 game 方法,并且在运行时会根据对象的实际类型来调用对应的方法。这就是多态的体现,同一个方法在不同的对象上表现出不同的行为。
在程序中,当调用 xw.play_with_dog(dog1) 时,打印出 "普通狗简单的玩耍...";而当调用 xw.play_with_dog(xtq) 时,打印出 "哮天犬在天上玩耍..."。这就是多态带来的灵活性和可扩展性,通过多态可以方便地添加新的子类并对其进行处理,而不需要修改父类的代码。
Python 多态练习题
好的,以下是几个 Python 多态的练习题:
1. 创建一个 `Animal` 类和它的子类 `Dog`、`Cat`。每个子类都有一个 `speak()` 方法,分别返回 `"Woof"` 和 `"Meow"`。创建一个函数 `animal_speak()`,它接受一个 `Animal` 类型的对象,并调用它的 `speak()` 方法。
```python
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof"
class Cat(Animal):
def speak(self):
return "Meow"
def animal_speak(animal):
return animal.speak()
```
2. 创建一个 `Shape` 类和它的子类 `Circle`、`Rectangle`。每个子类都有一个 `area()` 方法,分别返回圆形和矩形的面积。创建一个函数 `get_area()`,它接受一个 `Shape` 类型的对象,并调用它的 `area()` 方法。
```python
import math
class Shape:
def area(self):
pass
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return math.pi * self.radius ** 2
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
def get_area(shape):
return shape.area()
```
3. 创建一个 `Person` 类和它的子类 `Student`、`Teacher`。每个子类都有一个 `teach()` 方法,分别返回 `"I will teach you"` 和 `"I will grade your papers"`. 创建一个函数 `classroom()`,它接受一个 `Person` 类型的对象,并调用它的 `teach()` 方法。
```python
class Person:
def teach(self):
pass
class Student(Person):
def teach(self):
return "I will learn from you"
class Teacher(Person):
def teach(self):
return "I will teach you"
def classroom(person):
return person.teach()
```
这些练习题可以帮助你加深对 Python 多态的理解。