Python的继承与多态

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Python的继承与多态
一、概述
继承和多态是面向对象程序设计的两个基本概念。

继承是指一个
类可以从另一个类继承属性和方法。

多态是指同一个方法可以根据传
入的不同参数表现出不同的行为。

Python作为一种面向对象编程语言,继承和多态在其语言中得到了非常好的支持。

本文将分别从继承和多
态两个方面来讨论Python中的这两个概念,并探究其在Python程序
设计中的应用。

二、继承的应用
1.基本概念
继承是指一个类可以从另一个类继承属性和方法。

在Python中,
继承可以通过在类定义时在类名后加上要继承的父类名称来实现。

例如:
```
class Animal:
def __init__(self, name):
= name
def age(self):
return 0
class Dog(Animal):
def age(self):
return 2
```
在这个例子中,我们定义了一个父类Animal,该类有一个属性name和一个方法age,其中age方法返回0。

然后我们定义了一个子类Dog,它继承了Animal并覆盖了其age方法,使其返回2。

2.使用super函数
在上面的例子中,我们通过重新定义方法来覆盖父类的方法。

但是,如果我们想在子类中保留父类方法的一些行为,该怎么办呢?这
时就需要使用super函数。

super函数可以用来调用父类的方法,让子类继承父类的行为。

例如:
```
class Animal:
def __init__(self, name):
= name
def age(self):
return 0
class Dog(Animal):
def age(self):
return super().age() + 2
```
在这个例子中,我们重新定义了Dog类的age方法,在其中调用了父类Animal的age方法,并给其加上了2。

这样就在保留原有的父类行为的同时,给其添加了新的行为。

3.实现多态
继承不仅可以使子类继承父类的行为,还可以通过多态来实现不同的子类表现出不同的行为。

在Python中,多态可以通过参数的不同类型来实现。

例如:
```
class Animal:
def __init__(self, name):
= name
def age(self):
return 0
class Dog(Animal):
def age(self):
return super().age() + 2
class Cat(Animal):
def age(self):
return super().age() + 1
def check_age(animal):
print(animal.age())
check_age(Dog("Tommy")) #输出:2
check_age(Cat("Mimi")) #输出:1
```
在这个例子中,我们定义了一个check_age函数,接受一个
Animal对象作为参数,并调用其age方法。

然后我们分别创建了一个Dog和Cat对象,并将其作为参数传入check_age函数。

由于Dog和
Cat都继承了Animal,并实现了其age方法,因此在check_age函数
内部,它们的age方法都被成功调用,并输出了各自的年龄。

三、多态的应用
1.基本概念
多态是指同一个方法可以根据传入的不同参数表现出不同的行为。

在Python中,多态可以通过函数的参数类型来实现。

例如:
```
def add(x, y):
return x + y
print(add(1, 2)) #输出:3
print(add("hello ", "world")) #输出:hello world
```
在这个例子中,我们定义了一个add函数,接受两个参数。

我们分别传入了一个整型和两个字符串作为参数,add函数根据不同参数的类型,表现出了不同的行为。

2.抽象基类
在Python中,我们还可以使用抽象基类来实现多态。

抽象基类是一个不能被实例化的类,它的目的是为了被继承。

抽象基类中定义了一些抽象方法,子类必须实现这些抽象方法,否则将无法被实例化。

例如:
```
from abc import ABC, abstractmethod class Shape(ABC):
@abstractmethod
def area(self):
pass
class Rectangle(Shape):
def __init__(self, width, height): self.width = width
self.height = height
def area(self):
return self.width * self.height class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2
shapes = [Rectangle(3, 4), Circle(5)]
for shape in shapes:
print(shape.area())
```
在这个例子中,我们定义了一个抽象基类Shape,其中定义了一个抽象方法area。

然后我们定义了两个子类Rectangle和Circle,它们都继承了Shape,并实现了其抽象方法。

最后,我们创建了一个包含不同形状的列表,并遍历列表调用各自的area方法。

由于Rectangle和Circle都实现了Shape的抽象方法,因此它们的area方法均被成功调用。

四、总结
继承和多态是面向对象程序设计中至关重要的两个概念。

在Python中,这两个概念得到了非常好的支持。

通过继承和多态,我们可以将代码组织得更为清晰和优雅,提高代码的可重用性、可扩展性
和可维护性,并让代码更易于理解。

在设计Python程序时,尤其需要注意继承和多态的应用。

只有正确地使用这两个概念,才能写出好的Python程序。

相关文档
最新文档