亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

使用元類

終于到了使用元類了,可是一般來說,我們根本就用不上它,就像Python 界的領(lǐng)袖 Tim Peters 說的:

元類就是深度的魔法,99% 的用戶應(yīng)該根本不必為此操心。如果你想搞清楚究竟是否需要用到元類,那么你就不需要它。那些實際用到元類的人都非常清楚地知道他們需要做什么,而且根本不需要解釋為什么要用元類。

元類的主要用途是創(chuàng)建 API。一個典型的例子是 Django ORM。它允許你像這樣定義:

class Person(models.Model):
    name = models.CharField(max_length=30)
    age = models.IntegerField()

但是如果你這樣做的話:

guy  = Person(name='bob', age='35')
print guy.age

這并不會返回一個 IntegerField 對象,而是會返回一個 int,甚至可以直接從數(shù)據(jù)庫中取出數(shù)據(jù)。這是有可能的,因為 models.Model 定義了 __metaclass__ , 并且使用了一些魔法能夠?qū)⒛銊倓偠x的簡單的Person類轉(zhuǎn)變成對數(shù)據(jù)庫的一個復(fù)雜 hook。Django 框架將這些看起來很復(fù)雜的東西通過暴露出一個簡單的使用元類的 API 將其化簡,通過這個 API 重新創(chuàng)建代碼,在背后完成真正的工作。

Python 中的一切都是對象,它們要么是類的實例,要么是元類的實例,除了 type。type 實際上是它自己的元類,在純 Python 環(huán)境中這可不是你能夠做到的,這是通過在實現(xiàn)層面耍一些小手段做到的。

繼續(xù)學習