抽象类(元类=ABCMeta)和抽象类(ABC)之间的区别

use*_*099 5 python abstract-class abc python-3.x

我见过两种在python. 有什么区别,分别有哪些使用场景?

from abc import ABCMeta, abstractmethod
class AbstactClass(metaclass = ABCMeta):
Run Code Online (Sandbox Code Playgroud)

from abc import ABC, abstractmethod
class AbstractClass2(ABC):
Run Code Online (Sandbox Code Playgroud)

blh*_*ing 27

没有实际的功能差异。该类ABC只是一个方便的类,可以帮助那些不太了解元类概念的人使代码看起来不那么混乱,如文档所述

以 ABCMeta 作为其元类的辅助类。使用此类,可以通过简单地从 ABC 派生来创建抽象基类,从而避免有时令人困惑的元类用法

如果你看看abc.py的实现就更清楚了,它只不过是一个指定ABCMeta为其元类的空类,只是为了让它的后代可以继承该类型:

class ABC(metaclass=ABCMeta):
    """Helper class that provides a standard way to create an ABC using
    inheritance.
    """
    __slots__ = ()
Run Code Online (Sandbox Code Playgroud)