迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python 抽象属性

作者:迹忆客 最近更新:2023/06/18 浏览次数:

本篇文章将介绍使用 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 中的数据类继承

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

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 的 @ 符号。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便