抽象是面向对象编程的重要原则之一。它是指一种编程方法,通过该方法,仅公开有关对象的相关数据,而隐藏所有其他详细信息。这种方法有助于降低应用程序开发的复杂性并提高应用程序开发的效率。
Python 抽象的类型
抽象有两种类型。一种是数据抽象,其中原始数据实体通过数据结构隐藏,该数据结构可以在内部处理隐藏的数据实体。另一种类型称为进程抽象。它是指隐藏进程的底层实现细节。
Python 抽象类
在面向对象编程术语中,如果一个类不能实例化,则称其为抽象类,也就是说,你可以拥有抽象类的对象。但是,您可以将其用作构造其他类的基类或父类。
创建抽象类
要在 Python 中创建抽象类,它必须继承 ABC 模块中定义的 ABC 类。此模块在 Python 的标准库中可用。此外,该类必须至少有一个抽象方法。同样,抽象方法是无法调用但可以重写的方法。你需要用 @abstractmethod 装饰器来装饰它。
示例:创建 Absctract 类
from abc import ABC, abstractmethod
class demo(ABC):
@abstractmethod
def method1(self):
print ("abstract method")
return
def method2(self):
print ("concrete method")
demo 类继承了 ABC 类。有一个 method1() 是一个抽象方法。请注意,该类可能具有其他非抽象 (具体) 方法。
如果你尝试声明 demo 类的对象,Python 会引发 TypeError -
obj = demo()
^^^^^^
TypeError: Can't instantiate abstract class demo with abstract method method1
^^^^^^
TypeError: Can't instantiate abstract class demo with abstract method method1
此处的 demo 类可用作另一个类的父类。但是,子类必须覆盖父类中的 abstract 方法。如果没有,Python 会引发此错误 -
TypeError: Can't instantiate abstract class concreteclass with abstract method method1
抽象方法覆盖
因此,以下示例中给出了重写了 abstract 方法的子类 -
例
from abc import ABC, abstractmethod
class democlass(ABC):
@abstractmethod
def method1(self):
print ("abstract method")
return
def method2(self):
print ("concrete method")
class concreteclass(democlass):
def method1(self):
super().method1()
return
obj = concreteclass()
obj.method1()
obj.method2()
输出
当您执行此代码时,它将生成以下输出 -
abstract method
concrete method
concrete method