2016-03-18 123 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