2016-09-10 155 views
0

從我到目前爲止學到的知識來看,元類和繼承自Python中的超類有着非常相似的目的,但超類的繼承功能更強大。爲什麼我更喜歡元類繼承Python中的超類的繼承

爲什麼我會比超類繼承偏好元類?在什麼樣的情況下元類會有幫助?

對不起,如果有任何錯誤的假設。我今天才學習元類。

+3

「元類和繼承自Python的超類有着非常相似的目的」 - 什麼?不,你從哪裏得到這個想法?元類具有非常不同的作用。 – user2357112

+0

對於我來說,至少它和剛學習元類的人看起來非常相似。我可以知道這些差異嗎? –

回答

1

我想你已經誤解了。繼承是經典的面向對象技術,通過將常用的東西放在基類中並從中派生出來,從而重用代碼。

Metaclasses簡而言之)允許您自定義類的創建過程(特別是__new__方法),以便您可以動態添加屬性和類似的東西。這有點複雜,在大多數情況下,你不會需要這個。這個答案有一些詳細信息What is a metaclass in Python?

+0

爲什麼我想要自定義創建過程? –

+1

「元類...允許您自定義創建類的過程」 - 它們讓您自定義的不僅僅是創建過程。 [你想要一個'Color'類,其中Color ['red']'工作並且做了一些有意義的事情](https://docs.python.org/3/library/enum.html)Metaclasses可以讓你做到這一點。 [當且僅當'thing'是可迭代的時,你想要一個'Iterable'類,其中'isinstance(thing,Iterable)'爲真(https://docs.python.org/3/library/collections.abc.html )Metaclasses讓你做到這一點。 – user2357112

+0

也許爲了確保您只返回一個預先創建的類集(例如線程池)或者可能(如在ORM中),您可以創建一個包含db列屬性的類(例如日期,名稱等等),你會自動得到像「filter_by_date」,「filter_by_name」等方法 –