Python 抽象
抽象用于隐藏函数的内部功能,使用户无法了解函数的内部工作原理。用户只与函数的基本实现进行交互,而内部工作被隐藏起来。用户了解函数的功能,但不知道它是如何运作的。
简单来说,我们都使用智能手机,并熟悉其功能,如相机、语音记录器、拨号等,但我们不知道这些操作在后台是如何进行的。再举个例子,当我们使用电视遥控器增大音量时,我们并不知道按下一个键如何增加电视的音量。我们只知道按“+”按钮可以增加音量。
这正是面向对象概念中的抽象的工作方式。
为什么抽象很重要
在Python中,抽象用于隐藏无关的数据/类以减少复杂性。它还提高了应用程序的效率。接下来,我们将学习如何使用Python程序实现抽象。
Python中的抽象类
在Python中,可以通过使用抽象类和接口来实现抽象。
包含一个或多个抽象方法的类称为抽象类。抽象方法不包含实现。抽象类可以被子类继承,抽象方法在子类中得到定义。抽象类的作用是作为其他类的蓝图。当设计大型函数时,抽象类非常有用。抽象类还有助于为组件的不同实现提供标准接口。Python提供了abs模块来在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() 方法的实现开始起作用。在抽象类中定义的抽象方法 sides() 方法从来没有被调用过。
要记住的要点
下面是我们在Python中应该记住的关于抽象基类的要点。
- 一个抽象类可以包含普通方法和抽象方法。
- 一个抽象类不能被实例化;我们不能为抽象类创建对象。
抽象是隐藏核心功能不让用户知道的重要部分。我们已经涵盖了Python中抽象的所有基本概念。