2010-08-16 27 views
6

你好堆棧溢出貢獻者,參數化類和元類之間的區別是什麼(請在Python中的代碼示例)?

我是一個新手程序員學習Python現在,我來到this site這有助於解釋面向對象的範例。我知道元類是類的類(比如元目錄是目錄的目錄等等),但是我遇到了一些問題:元類和參數化類之間的實際區別是什麼,根據網站的定義?

如果可以,請在Python中包含代碼示例,以說明兩者之間的差異。感謝您的幫助!

回答

14

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(幾乎每個我能想到的更現實的例子 - 我只是選擇了一個簡單的例如,這樣做很難辨別,而不是一個現實的,因此必然非常複雜的;-)。

+0

幾天前我轉向Py3,認爲既然我現在只是一名學生,我應該學習明天的'時髦的新事物'。猜猜這是一個聰明的舉動:-) – yrsnkd 2010-08-16 19:01:39

+0

+1。很好的解釋。 – 2010-08-16 19:01:43

+0

+1一如既往的絕佳解釋。 – katrielalex 2010-08-16 19:09:25

0

This write up may be help。 this one是一個古老的,但值得一讀。我知道這並不能完全回答你的問題,但我希望它能讓你思考。

相關問題