Python3.5面向对象程序设计之类的继承和多态详解
什么是继承?
继承是面向对象编程的重要特性之一,它允许我们定义一个类,这个类可以生成功能与已存在类相似但又具有独特特性的新类。这个新类被称为子类,它继承了父类的所有方法和属性,也可以添加自己的方法和属性。
在Python中,我们使用关键字"extends"定义一个子类,如下所示:
class ChildClass(ParentClass):
# 添加子类的方法和属性
什么是多态?
多态是另一个面向对象编程的特性,它允许我们使用同一个名称的方法或函数来处理不同类型的数据。也就是说,我们可以使用适当的方式在不同对象中调用相同的方法,这样可以提高代码的可读性和可维护性。
在Python中,多态类似于Java中的接口,我们定义一个抽象基类(ABC),提供一个抽象方法,然后让具体的子类去提供实现。
from abc import ABC, abstractmethod
class Shape(ABC): # 抽象基类
@abstractmethod # 抽象方法
def area(self):
pass
class Rectangle(Shape): # 子类1 实现了area方法
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
class Triangle(Shape): # 子类2 实现了area方法
def __init__(self, base, height):
self.base = base
self.height = height
def area(self):
return self.base * self.height / 2
在上面的代码中,我们定义了一个抽象基类Shape,有一个抽象方法area,在子类Rectangle和Triangle中分别实现了该方法,这样它们就能以不同的方式计算面积。
继承和多态的示例说明
示例一:我们定义一个动物类Animal,拥有两个属性name和age,以及一个方法run。然后在子类Dog和Cat中分别实现eat方法。
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
def run(self):
print('running')
class Dog(Animal):
def eat(self):
print('eating bone')
class Cat(Animal):
def eat(self):
print('eating fish')
dog = Dog('Tommy', 2)
cat = Cat('Kitty', 1)
dog.run() # running
cat.run() # running
dog.eat() # eating bone
cat.eat() # eating fish
在这个示例中,Animal是父类,Dog和Cat是子类,它们继承了Animal类的属性和方法,并分别实现了自己的eat方法来完成特定的行为。在主程序中,我们实例化了一个Dog和一个Cat,并可以调用它们各自的run和eat方法。
示例二:我们定义一个Shape的抽象基类,其中包含一个抽象方法area,并在其子类Square和Circle中分别实现这个方法。
from abc import ABC, abstractmethod
import math
class Shape(ABC):
@abstractmethod
def area(self):
pass
class Square(Shape):
def __init__(self, length):
self.length = length
def area(self):
return self.length ** 2
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return math.pi * self.radius ** 2
square = Square(5)
circle = Circle(3)
print(square.area()) # 25
print(circle.area()) # 28.274333882308138
在这个示例中,我们定义了一个抽象基类Shape作为基础,并在Square和Circle中分别实现了area方法来计算正方形和圆形的面积。在主程序中,我们实例化了一个Square和一个Circle,并调用它们各自的area方法,这样就可以得到各自的面积。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python3.5面向对象程序设计之类的继承和多态详解 - Python技术站