Python 抽象属性
本篇文章将介绍使用 abc 或抽象基类模块在 Python 中创建具有抽象属性的类。
Python 抽象属性
面向对象编程中的抽象用于向用户隐藏不必要的信息。 函数的内部工作对用户是隐藏的,但是用户可以使用函数来执行任务。
例如,我们使用计算机软件来执行不同的任务,但我们不知道软件是如何执行任务的。 我们只为软件提供输入并从中获得输出。
我们可以在 Python 中使用抽象来通过隐藏不相关的信息来降低程序的复杂性。
如果一个类包含一个或多个抽象方法,它就会变成抽象类。 抽象方法定义在子类中,抽象类会继承子类,因为抽象类是其他类的蓝本。
在Python中,我们可以使用abc模块或者抽象基类模块来实现抽象类。 抽象基类为子类提供了一个接口,当代码很大并且很难记住所有类时,它很有用。
我们需要在基类中引入abc模块,并用它来将基类方法装饰成抽象。 定义一个抽象方法,我们可以在基类中定义方法之前使用@abstractmethod装饰器,我们可以使用@property装饰器使方法成为抽象属性。
例如,让我们导入 abc 模块并创建一个将从 ABC 类继承的 Bike 类。 在 Bike 类中,我们将创建一个抽象方法 mileage()。
我们现在可以继承基类,用抽象方法实现不同的子类。 请参阅下面的代码。
# Class Code
from abc import ABC, abstractmethod
class Bike(ABC):
@property
@abstractmethod
def mileage(self):
pass
class Honda(Bike):
def mileage(self):
print("The mileage is 20kmph")
class CD70(Bike):
def mileage(self):
print("The mileage is 15kmph ")
class CD150(Bike):
def mileage(self):
print("The mileage is 34kmph ")
# Main Code
h = Honda()
h.mileage()
r = CD70()
r.mileage()
s = CD150()
s.mileage()
输出:
The mileage is 20kmph
The mileage is 15kmph
The mileage is 34kmph
在上面的代码中,我们创建了子类的对象,然后我们调用了它们的方法 mileage()
,它将打印自行车的里程数。 Bike 类也有 mileage()
方法,但我们不能调用它,因为该方法是抽象的。
比如我们重复上面的例子,调用Bike类的mileage方法。 请参阅下面的代码。
# Class Code
from abc import ABC, abstractmethod
class Bike(ABC):
@property
@abstractmethod
def mileage(self):
pass
class Honda(Bike):
def mileage(self):
print("The mileage is 20kmph")
class CD70(Bike):
def mileage(self):
print("The mileage is 15kmph ")
class CD150(Bike):
def mileage(self):
print("The mileage is 34kmph ")
# Main Code
b = Bike()
b.mileage()
输出:
TypeError: Can't instantiate abstract class Bike with abstract methods mileage
上面的代码很明确的说,抽象类Bike是有抽象方法的,这就是为什么不能创建它的对象,也不能调用它的方法。
我们还可以在定义第一个方法之前使用@abstractmethod 装饰器将其他类的方法作为抽象方法。 当试图使该类的对象访问这些方法时,Python 会报错。
例如,让我们将子类的方法抽象化。 请参阅下面的代码。
# Class Code
from abc import ABC, abstractmethod
class Bike(ABC):
@property
@abstractmethod
def mileage(self):
pass
class Honda(Bike):
@abstractmethod
def mileage(self):
print("The mileage is 20kmph")
def mileage2(self):
print("The mileage is 200 kmph")
# Main Code
b = Honda()
b.mileage2()
输出:
TypeError: Can't instantiate abstract class Honda with abstract methods mileage
我们在 Honda 类中定义了两个方法,但由于该类是抽象的,所以它们都不可访问。
相关文章
Python 中的数据类继承
发布时间:2023/06/18 浏览次数:122 分类:Python
-
本文解释了数据类、继承、多级继承、默认和非默认属性等概念。 提供了足够的编码示例以掌握编译过程中展开的概念。
Python 生成器类
发布时间:2023/06/18 浏览次数:185 分类:Python
-
本篇文章将讨论使用 yield 语句和 next() 函数在 Python 中创建生成器类。要了解生成器,我们首先需要了解下面讨论的迭代器。Python 迭代器是用于逐个访问容器中元素的对象。
在 Python 中实现多个装饰器
发布时间:2023/06/17 浏览次数:95 分类:Python
-
本文重点介绍多个装饰器的概念。 读者将学习装饰器的基础知识,它是如何创建和实现的,以及如何将它与其他装饰器链接到一个函数上。
使用 Python 装饰器重试代码块
发布时间:2023/06/17 浏览次数:94 分类:Python
-
在这种情况下,修改会在给定情况下多次重试函数,其返回值可能与我们想要的不同。@retry 装饰器的重要性 我们可以使用装饰器来扩展特定函数的行为,我们可以轻松地创建装饰器来修改该函
Python 装饰器顺序
发布时间:2023/06/17 浏览次数:192 分类:Python
-
在这篇 Python 文章中,我们将了解什么是装饰器、它们的使用方式以及我们如何利用它们来构建代码。 我们将看到装饰器是如何成为一种强大的工具,可以用来为我们的应用程序添加功能,并且
Python 中的 super参数
发布时间:2023/06/17 浏览次数:158 分类:Python
-
本文的主题是正确使用 Python 超级参数。 我们还将了解超和继承的概念、使用超参数的适当代码示例以及基类的概念。Python 中的 super 参数 在 Python 中,super 调用另一个类的方法。
将 Kwargs 传递给 Python 中的另一个函数
发布时间:2023/06/17 浏览次数:128 分类:Python
-
Python 将 kwargs 参数表示为关键字参数,可以在参数名称前使用两个星号传递参数数量。 通过这篇文章,我们寻找 Python 如何将 kwargs 传递给另一个函数。
在 Python 中打印度数符号
发布时间:2023/06/17 浏览次数:191 分类:Python
-
本篇文章将介绍如何用 Python 编写度数符号。度数符号是表示特定区域温度的符号。 例如,假设卡纳塔克邦的气温为 34 摄氏度; 它表明,在印度卡纳塔克邦,温度为 34 度
Python 中的 @ 符号
发布时间:2023/06/17 浏览次数:138 分类:Python
-
Python 中 @ 符号最常见的用例是装饰器。 装饰器允许您更改函数或类的行为。@ 符号也可以用作数学运算符,因为它可以在 Python 中乘以矩阵。 本教程将教您使用 Python 的 @ 符号。