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

使用元類

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

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

元類別的主要用途是建立 API。一個(gè)典型的例子是 Django ORM。它允許你像這樣定義:

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

但是如果你這樣做的話:

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

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

Python 中的一切都是對(duì)象,它們要麼是類別的實(shí)例,要麼是元類別的實(shí)例,除了 type。 type 其實(shí)是它自己的元類,在純 Python 環(huán)境中這可不是你能夠做到的,這是透過在實(shí)作層面耍一些小手段做到的。

繼續(xù)學(xué)習(xí)
||
提交重置程式碼