6
在Python 3.4+,我們可以做在Python 3.4+中,使用ABC與ABCMeta有什麼區別?
class Foo(abc.ABC):
...
,或者我們可以做
class Foo(metaclass=abc.ABCMeta):
...
是否有兩個,我應該知道的有何區別?
在Python 3.4+,我們可以做在Python 3.4+中,使用ABC與ABCMeta有什麼區別?
class Foo(abc.ABC):
...
,或者我們可以做
class Foo(metaclass=abc.ABCMeta):
...
是否有兩個,我應該知道的有何區別?
abc.ABC
基本上只是一個超過metaclass=abc.ABCMeta
的額外層。即abc.ABC
爲我們隱含地定義了元類。
(來源:https://hg.python.org/cpython/file/3.4/Lib/abc.py#l234)
class ABC(metaclass=ABCMeta):
"""Helper class that provides a standard way to create an ABC using
inheritance.
"""
pass
唯一的區別是,在第一種情況下,你需要一個簡單的繼承,並在後者,你需要指定元類。
從What's new in Python 3.4(重點煤礦):
新類
ABC
有ABCMeta
其元類。使用ABC
作爲基準 類基本上具有與指定metaclass=abc.ABCMeta
,相同的效果,但是類型更簡單並且易於閱讀。
相關的問題:Create abstract base classes by inheritance rather than a direct invocation of __metaclass__
@海象 - 我相信,分歧並不陌生Python3.X。類創建實例並且元類創建類。當你調用Class時,它會爲該類使用隱式元類'type',但你不知道它。我認爲大多數情況下,你不需要使用元類,儘管我們在頭腦中得到的東西似乎總是通過使用元類來利用某些東西。 – inbinder