Python - 抽象



抽象面向对象编程的重要原则之一。它指的是一种编程方法,只公开对象的相关数据,隐藏所有其他细节。这种方法有助于降低复杂性并提高应用程序开发效率。

Python 抽象的类型

抽象有两种类型。一种是数据抽象,其中原始数据实体通过可以内部处理隐藏数据实体的数据结构隐藏起来。另一种类型称为过程抽象。它指的是隐藏过程的底层实现细节。

Python 抽象类

在面向对象编程术语中,如果一个类不能被实例化,也就是说你不能拥有一个抽象类的对象,那么这个类就被称为抽象类。但是,你可以将它用作构建其他类的基类或父类。

创建抽象类

要在 Python 中创建抽象类,它必须继承 ABC 模块中定义的 ABC 类。此模块可在 Python 的标准库中找到。此外,该类必须至少有一个抽象方法。同样,抽象方法是不能被调用但可以被重写的方法。你需要用@abstractmethod装饰器来装饰它。

示例:创建抽象类

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

此处的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 ("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
广告