Python有特定的ABCs for container types。它说,他们是,“...用于测试一个班级是否提供特定的界面。” (并且它们对于一些mixin也是有用的,但是暂时忽略它)。抽象基类与鸭子打字
我很难弄清楚为什么这些ABC中的一些真的很有用。也许我的问题是,只是在文档的例子是过于学术化,但使用这些例子:
# Verbatim
size = None
if isinstance(myvar, collections.abc.Sized):
size = len(myvar)
# Is that so much better than
size = None
if hasattr(myvar, '__len__'):
size = len(myvar)
在第二种情况下,你避免进口和代码似乎更明确的给我。你可以从它的名字中推断出什么是collections.abc.Sized,或者查看它,但它只是不那么明确而已。“如果它有一个长度,就得到它的长度。”
abc方法集合类型测试真的比惯用的Python更明确hasattr
测试,如果是这样,为什么? (是否简单比复杂王牌不是在这种情况下隐含更好明确的是更好吗?)
[ABC vs Alternatives](http://www.python.org/dev/peps/pep-3119/#abcs-vs-alternatives) – dawg