2016-03-18 97 views
4

下表显示了遍及Python使用的各种抽象基类。然而,我有点困惑(在这方面)python抽象基类,mixin和抽象方法之间的区别

Abstract Methods列和Mixin Methods列之间的区别是什么。一个是可选的,另一个不是?

我一直在思考它,每一个“理论”似乎都不对。

reference


enter image description here

+1

*“抽象方法”*:您必须提供。 *“混合方法”*:那么你会得到。 – jonrsharpe

回答

6

在任何抽象方法列,你必须自己实现。 ABC提供了Mixin方法列中方法的默认实现,并根据您要编写的方法实现。

2

抽象方法是那些你从这个ABC继承时必须定义的方法。

Mixin列列出了您可以使用的方法,您可以通过从object而不是从这个ABC继承而免费获得它们。例如,如果您定义了__getitem__,则可以在之后自动使用__iter__

从这些类继承的另一个好处是任何人都可以事后看到你的类是什么意思,因为它是issubclass(your_class, any_ABC)和任何实例是isinstance(your_object, any_ABC)。但是,这是在你发布的表格之后的教程中编写的。

+0

对于'issubclass()'和'isinstance()' – AlanSTACK

+0

上的点有什么问题抱歉,这是不正确的,这些只是带有两个参数的内置方法,谢谢 – Ilja