在Python中,继承和多态是面向对象编程(OOP)中的两个核心概念,它们使得代码更加模块化和可重用。
继承(Inheritance)
继承是一种创建新类的方式,新创建的类称为子类(或派生类),被继承的类称为基类(或父类、超类)。子类可以继承父类的属性和方法,也可以定义自己的属性和方法。继承使得子类能够复用父类的代码,减少代码冗余。
示例代码
python复制代码
# 定义基类 |
|
class Animal: |
|
def __init__(self, name): |
|
self.name = name |
|
def speak(self): |
|
raise NotImplementedError("子类必须实现这个方法") |
|
# 定义子类 |
|
class Dog(Animal): |
|
def speak(self): |
|
return self.name + ' says Woof!' |
|
# 创建Dog类的实例 |
|
d = Dog('Buddy') |
|
print(d.speak()) # 输出: Buddy says Woof! |
在上面的例子中,Dog
类继承了Animal
类,并重写了speak
方法。
多态(Polymorphism)
多态意味着“多种形态”,在面向对象编程中,它指的是同一个接口(方法)在不同类中的具体实现可以不同。Python中多态的实现主要依赖于方法重写和接口(在Python中,接口不是强制的,但可以通过抽象基类模拟)。多态允许我们编写更灵活、可扩展的代码。
示例代码
python复制代码
from abc import ABC, abstractmethod |
|
# 定义一个抽象基类,作为接口 |
|
class Pet(ABC): |
|
@abstractmethod |
|
def make_sound(self): |
|
pass |
|
# 定义子类,实现接口 |
|
class Dog(Pet): |
|
def make_sound(self): |
|
return "Woof!" |
|
class Cat(Pet): |
|
def make_sound(self): |
|
return "Meow!" |
|
# 定义一个函数,接受Pet类型的参数,体现了多态 |
|
def pet_sound(pet): |
|
print(pet.make_sound()) |
|
# 创建实例并调用函数 |
|
dog = Dog() |
|
cat = Cat() |
|
pet_sound(dog) # 输出: Woof! |
|
pet_sound(cat) # 输出: Meow! |
在这个例子中,Dog
和Cat
类都实现了Pet
抽象基类定义的make_sound
方法,但它们的实现是不同的。pet_sound
函数接受任何Pet
类型的参数,并调用其make_sound
方法,展示了多态性。
Python的多态性主要通过接口(通过抽象基类实现)和动态类型系统(不需要显式声明变量类型)来支持。这意味着,只要对象实现了期望的方法,你就可以将它作为参数传递给任何接受该类型参数的函数,而不需要担心对象的实际类型。