国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

解密Python中的描述符(descriptor)

2020-02-23 01:29:20
字體:
來源:轉載
供稿:網友

Python中包含了許多內建的語言特性,它們使得代碼簡潔且易于理解。這些特性包括列表/集合/字典推導式,屬性(property)、以及裝飾器(decorator)。對于大部分特性來說,這些“中級”的語言特性有著完善的文檔,并且易于學習。

但是這里有個例外,那就是描述符。至少對于我來說,描述符是Python語言核心中困擾我時間最長的一個特性。這里有幾點原因如下:

1.有關描述符的官方文檔相當難懂,而且沒有包含優秀的示例告訴你為什么需要編寫描述符(我得為Raymond Hettinger辯護一下,他寫的其他主題的Python文章和視頻對我的幫助還是非常大的)
2.編寫描述符的語法顯得有些怪異
3.自定義描述符可能是Python中用的最少的特性,因此你很難在開源項目中找到優秀的示例

但是一旦你理解了之后,描述符的確還是有它的應用價值的。這篇文章告訴你描述符可以用來做什么,以及為什么應該引起你的注意。

一句話概括:描述符就是可重用的屬性

在這里我要告訴你:從根本上講,描述符就是可以重復使用的屬性。也就是說,描述符可以讓你編寫這樣的代碼:
代碼如下:
f = Foo()
b = f.bar
f.bar = c
del f.bar

而在解釋器執行上述代碼時,當發現你試圖訪問屬性(b = f.bar)、對屬性賦值(f.bar = c)或者刪除一個實例變量的屬性(del f.bar)時,就會去調用自定義的方法。

讓我們先來解釋一下為什么把對函數的調用偽裝成對屬性的訪問是大有好處的。

property——把函數調用偽裝成對屬性的訪問

想象一下你正在編寫管理電影信息的代碼。你最后寫好的Movie類可能看上去是這樣的:
代碼如下:
class Movie(object):
    def __init__(self, title, rating, runtime, budget, gross):
        self.title = title
        self.rating = rating
        self.runtime = runtime
        self.budget = budget
        self.gross = gross
    def profit(self):
        return self.gross - self.budget

你開始在項目的其他地方使用這個類,但是之后你意識到:如果不小心給電影打了負分怎么辦?你覺得這是錯誤的行為,希望Movie類可以阻止這個錯誤。 你首先想到的辦法是將Movie類修改為這樣:

代碼如下:
class Movie(object):
    def __init__(self, title, rating, runtime, budget, gross):
        self.title = title
        self.rating = rating

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 定日县| 万荣县| 高阳县| 乌苏市| 临桂县| 涡阳县| 涪陵区| 太仓市| 吕梁市| 锦屏县| 丹棱县| 怀安县| 霍林郭勒市| 嘉义市| 砚山县| 瓮安县| 雷波县| 云和县| 淮安市| 宽城| 深泽县| 府谷县| 安多县| 勃利县| 黔江区| 香格里拉县| 青海省| 封丘县| 改则县| 阳西县| 叶城县| 巴青县| 蒲江县| 商南县| 彰化县| 台前县| 东莞市| 舟曲县| 东乌珠穆沁旗| 大关县| 兴海县|