Python教程-Python中的抽象
抽象用于隐藏函数的内部功能,使用户只与函数的基本实现交互,而内部工作被隐藏起来。用户只知道“函数做什么”,但不知道“它是如何做到的”。
简单来说,我们都使用智能手机,并且非常熟悉其功能,如相机、语音录制、拨打电话等,但我们不知道这些操作在后台是如何发生的。再举一个例子,当我们使用电视遥控器增加音量时,我们不知道按下一个键如何增加电视的音量。我们只知道按“+”按钮可以增加音量。
这正是抽象在面向对象概念中的工作方式。
为什么抽象很重要?
在Python中,抽象用于隐藏不相关的数据/类以减少复杂性。它还增强了应用程序的效率。接下来,我们将学习如何使用Python程序实现抽象。
Python中的抽象类
在Python中,可以通过使用抽象类和接口来实现抽象。
包含一个或多个抽象方法的类被称为抽象类。抽象方法不包含其实现。抽象类可以被子类继承,抽象方法在子类中得到定义。抽象类用于作为其他类的蓝图。抽象类在设计大型功能时很有用。抽象类还有助于为不同组件的不同实现提供标准接口。Python提供了abc模块来在Python程序中使用抽象。让我们看看以下语法。
语法
from abc import ABC
class ClassName(ABC):
我们从abc模块中导入ABC类。
抽象基类
抽象基类是接口的一种通用应用程序,用于一组子类。它可以被第三方使用,该第三方将提供实现,例如插件。在处理难以记住所有类的大型代码库时,它也很有用。
抽象类的工作原理
与其他高级语言不同,Python本身不提供抽象类。我们需要导入abc模块,该模块提供了定义抽象基类(ABC)的基础。ABC的工作方式是将基类的方法装饰为抽象方法。它将具体类注册为抽象基类的实现。我们使用@abstractmethod装饰符来定义抽象方法,或者如果不提供方法的定义,它将自动成为抽象方法。让我们看一个示例。
示例 -
# Python program demonstrate
# abstract base class work
from abc import ABC, abstractmethod
class Car(ABC):
def mileage(self):
pass
class Tesla(Car):
def mileage(self):
print("The mileage is 30kmph")
class Suzuki(Car):
def mileage(self):
print("The mileage is 25kmph ")
class Duster(Car):
def mileage(self):
print("The mileage is 24kmph ")
class Renault(Car):
def mileage(self):
print("The mileage is 27kmph ")
# Driver code
t= Tesla ()
t.mileage()
r = Renault()
r.mileage()
s = Suzuki()
s.mileage()
d = Duster()
d.mileage()
输出:
The mileage is 30kmph
The mileage is 27kmph
The mileage is 25kmph
The mileage is 24kmph
解释 -
在上面的代码中,我们导入了abc模块以创建抽象基类。我们创建了一个名为Car的类,它继承了ABC类,并定义了一个名为mileage()的抽象方法。然后我们从三个不同的子类继承了基类,并以不同的方式实现了抽象方法。我们创建了子类的对象以调用抽象方法。
让我们看另一个示例。
示例 -
# Python program to define
# abstract class
from abc import ABC
class Polygon(ABC):
# abstract method
def sides(self):
pass
class Triangle(Polygon):
def sides(self):
print("Triangle has 3 sides")
class Pentagon(Polygon):
def sides(self):
print("Pentagon has 5 sides")
class Hexagon(Polygon):
def sides(self):
print("Hexagon has 6 sides")
class square(Polygon):
def sides(self):
print("I have 4 sides")
# Driver code
t = Triangle()
t.sides()
s = square()
s.sides()
p = Pentagon()
p.sides()
k = Hexagon()
K.sides()
输出:
Triangle has 3 sides
Square has 4 sides
Pentagon has 5 sides
Hexagon has 6 sides
解释 -
在上面的代码中,我们定义了抽象基类Polygon,并定义了抽象方法。此基类被多个子类继承。我们在每个子类中实现了抽象方法。我们创建了子类的对象,并调用sides()方法。抽象类中定义的sides()方法从未被调用。
需要记住的要点
以下是我们应该记住有关Python中抽象基类的要点。
- 抽象类可以包含普通方法和抽象方法。
- 无法实例化抽象类;我们不能为抽象类创建对象。
抽象对于隐藏用户不需要了解的核心功能非常重要。我们已经涵盖了Python中抽象的所有基本概念。