问题描述
我见过两种在 python
中定义抽象类的方法。有什么区别,各自的使用场景是什么?
from abc import ABCMeta,abstractmethod
class AbstactClass(Metaclass = ABCMeta):
和
from abc import ABC,abstractmethod
class AbstractClass2(ABC):
解决方法
没有实际的功能差异。 ABC
类只是一个方便的类,可帮助那些不太了解元类概念的人使代码看起来不那么混乱,如 documentation 所述:
以 ABCMeta 作为元类的辅助类。有了这个班级, 可以通过简单地从 ABC 派生来创建抽象基类 避免有时混淆元类的用法
看一下abc.py的实现就更清楚了,它只不过是一个空类,指定了ABCMeta
作为它的元类,这样它的后代就可以继承该类型:
class ABC(metaclass=ABCMeta):
"""Helper class that provides a standard way to create an ABC using
inheritance.
"""
__slots__ = ()