Python 中的抽象

原文:https://www.javatpoint.com/abstraction-in-python

抽象用于向用户隐藏函数的内部功能。用户只与功能的基本实现交互,但内部工作是隐藏的。用户熟悉**“什么功能”但是不知道“它是怎么做的。”**

简单地说,我们都使用智能手机,并且非常熟悉它的功能,如摄像头、录音机、拨号等。,但我们不知道这些操作是如何在后台发生的。我们再举一个例子——当我们使用电视遥控器增加音量时。我们不知道按一个键如何增加电视的音量。我们只知道按“+”按钮来增加音量。

这正是在面向对象概念中工作的抽象。

为什么抽象很重要?

在 Python 中,抽象用于隐藏不相关的数据/类,以降低复杂性。也提高了应用效率。接下来,我们将学习如何使用 Python 程序实现抽象。

Python 中的抽象类

Python 中,抽象可以通过使用抽象类和接口来实现。

由一个或多个抽象方法组成的类称为抽象类。抽象方法不包含它们的实现。抽象类可以被子类继承,抽象方法在子类中得到定义。抽象类是另一个类的蓝图。当我们设计大型函数时,抽象类可能很有用。抽象类也有助于为组件的不同实现提供标准接口。Python 提供了 abc 模块来使用 Python 程序中的抽象。让我们看看下面的语法。

语法


from abc import ABC
class ClassName(ABC):

我们从 abc 模块导入 ABC 类。

抽象基类

抽象基类是一组子类接口的通用应用。它可以被第三方使用,第三方将提供诸如插件的实现。当我们使用大型代码库来努力记住所有的类时,这也是有益的。

抽象类的工作

与其他高级语言不同,Python 本身不提供抽象类。我们需要导入 abc 模块,它为定义抽象基类提供了基础。ABC 的工作原理是将基类的方法装饰成抽象的。它将具体的类注册为抽象基的实现。我们使用***@ abstract method】***装饰器来定义一个抽象方法,或者如果我们不为该方法提供定义,它会自动成为抽象方法。让我们理解下面的例子。

示例-


# 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 模块来创建抽象基类。我们创建了继承了 ABC 类的 Car 类,并定义了一个名为里程()的抽象方法。然后,我们从三个不同的子类继承了基类,并以不同的方式实现了抽象方法。我们创建了对象来调用抽象方法。

让我们理解另一个例子。

让我们理解另一个例子。

示例-


# 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 中抽象的所有基本概念。