抽象是面向对象编程的重要原则之一。它指的是一种编程方法,通过这种方法只暴露关于对象的相关数据,而隐藏所有其他细节。这种方法有助于减少复杂性和提高应用程序开发的效率。
Python 抽象的类型
抽象有两种类型。一种是数据抽象,其中原始的数据实体通过内部处理隐藏数据实体的数据结构被隐藏。另一种类型被称为过程抽象,它指的是隐藏一个过程的底层实现细节。
Python 抽象类
在面向对象编程术语中,如果一个类不能被实例化,也就是说你不能拥有一个抽象类的对象,那么这个类就被称为抽象类。然而,你可以把它用作构建其他类的基础或父类。
创建抽象类
要在 Python 中创建一个抽象类,它必须继承定义在 ABC 模块中的 ABC 类。这个模块包含在 Python 的标准库中。此外,这个类必须至少有一个抽象方法。同样,抽象方法是指不能直接调用但可以被覆写的那种方法。你需要使用 @abstractmethod
装饰器来装饰它。
示例:创建抽象类
from abc import ABC, abstractmethod
class demo(ABC):
@abstractmethod
def method1(self):
print("抽象方法")
return
def method2(self):
print("具体方法")
demo
类继承了 ABC
类。存在一个 method1()
,它是一个抽象方法。请注意,类中还可以包含其他非抽象(具体)的方法。
如果你尝试声明 demo
类的对象,Python 会抛出 TypeError
:
obj = demo()
TypeError: Can't instantiate abstract class demo with abstract method method1
demo
类可以作为另一个类的父类使用。但是,子类必须覆写父类中的抽象方法。否则,Python 会抛出如下错误:
TypeError: Can't instantiate abstract class concreteclass with abstract method method1
抽象方法覆写
因此,覆写了抽象方法的子类如下面的例子所示:
示例
from abc import ABC, abstractmethod
class democlass(ABC):
@abstractmethod
def method1(self):
print("抽象方法")
return
def method2(self):
print("具体方法")
class concreteclass(democlass):
def method1(self):
super().method1()
return
obj = concreteclass()
obj.method1()
obj.method2()
当你执行这段代码时,它会产生以下输出:
抽象方法
具体方法