你好堆棧溢出貢獻者,參數化類和元類之間的區別是什麼(請在Python中的代碼示例)?
我是一個新手程序員學習Python現在,我來到this site這有助於解釋面向對象的範例。我知道元類是類的類(比如元目錄是目錄的目錄等等),但是我遇到了一些問題:元類和參數化類之間的實際區別是什麼,根據網站的定義?
如果可以,請在Python中包含代碼示例,以說明兩者之間的差異。感謝您的幫助!
你好堆棧溢出貢獻者,參數化類和元類之間的區別是什麼(請在Python中的代碼示例)?
我是一個新手程序員學習Python現在,我來到this site這有助於解釋面向對象的範例。我知道元類是類的類(比如元目錄是目錄的目錄等等),但是我遇到了一些問題:元類和參數化類之間的實際區別是什麼,根據網站的定義?
如果可以,請在Python中包含代碼示例,以說明兩者之間的差異。感謝您的幫助!
Python沒有(或需要)「參數化類」,所以很難在Python中提供它們的例子;-)。元類只是「類的類」:通常是type
(只要在Py2中,您記得通過繼承object
或其他一些內置類型或其他新風格的類來創建新類, - 舊式課程是Py2中的遺留人工製品,幸運的是在Py3中消失了,理想情況下你應該忘記它們)。您可以創建一個自定義元類(通常繼承type
)用於幾個高級目的,但是您不可能需要需要(特別是考慮到,自從python 2.6以來,大多數用於需要自定義元類的東西現在可以使用類裝飾器更簡單)。
鑑於任何C類,type(C)
是它的元類。
參數化類是一個完全不同的概念。你可以來它在Python最近可能是一個工廠函數基於它的參數,使得並返回一個類:
def silly(n):
class Silly(object):
buh = ' '.join(n * ['hello'])
return Silly
Silly1 = silly(1)
Silly2 = silly(2)
a = Silly1()
print(a.buh)
b = Silly2()
print(b.buh)
將打印
hello
hello hello
再次,它絕對不東西你」經常需要 - 通過一個或幾個參數來製作幾個不同的類。無論如何,正如你所看到的,它與這個例子中的類(AKA元類)完全沒有關係,它總是type
(幾乎每個我能想到的更現實的例子 - 我只是選擇了一個簡單的例如,這樣做很難辨別,而不是一個現實的,因此必然非常複雜的;-)。
幾天前我轉向Py3,認爲既然我現在只是一名學生,我應該學習明天的'時髦的新事物'。猜猜這是一個聰明的舉動:-) – yrsnkd 2010-08-16 19:01:39
+1。很好的解釋。 – 2010-08-16 19:01:43
+1一如既往的絕佳解釋。 – katrielalex 2010-08-16 19:09:25