wal*_*rus 29 python python-3.x
在Python 3.4+中,我们可以做到
class Foo(abc.ABC):
...
Run Code Online (Sandbox Code Playgroud)
或者我们可以做到
class Foo(metaclass=abc.ABCMeta):
...
Run Code Online (Sandbox Code Playgroud)
我应该注意两者之间是否有任何差异?
Ash*_*ary 30
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
Run Code Online (Sandbox Code Playgroud)
唯一的区别是,在前一种情况下,您需要一个简单的继承,在后一种情况下,您需要指定元类.
从Python 3.4中的新内容(强调我的):
新类
ABC具有ABCMeta元类.使用ABC作为基类与指定具有基本相同的效果metaclass=abc.ABCMeta,但更容易键入和更容易阅读.
相关问题: 通过继承而不是直接调用来创建抽象基类__metaclass__
| 归档时间: |
|
| 查看次数: |
5237 次 |
| 最近记录: |