真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python中的enum模塊源碼詳析-創(chuàng)新互聯(lián)

起步

創(chuàng)新互聯(lián)建站專業(yè)IDC數(shù)據(jù)服務(wù)器托管提供商,專業(yè)提供成都服務(wù)器托管,服務(wù)器租用,成都IDC機(jī)房托管成都IDC機(jī)房托管,成都多線服務(wù)器托管等服務(wù)器托管服務(wù)。

上一篇 《Python 的枚舉類型》 文末說有機(jī)會的話可以看看它的源碼。那就來讀一讀,看看枚舉的幾個重要的特性是如何實現(xiàn)的。

要想閱讀這部分,需要對元類編程有所了解。

成員名不允許重復(fù)


這部分我的第一個想法是去控制 __dict__ 中的 key 。但這樣的方式并不好,__dict__ 范圍大,它包含該類的所有屬性和方法。而不單單是枚舉的命名空間。我在源碼中發(fā)現(xiàn) enum 使用另一個方法。通過 __prepare__ 魔術(shù)方法可以返回一個類字典實例,在該實例 使用 __prepare__ 魔術(shù)方法自定義命名空間,在該空間內(nèi)限定成員名不允許重復(fù)。

# 自己實現(xiàn)
class _Dict(dict):
 def __setitem__(self, key, value):
 if key in self:
  raise TypeError('Attempted to reuse key: %r' % key)
 super().__setitem__(key, value)

class MyMeta(type):
 @classmethod
 def __prepare__(metacls, name, bases):
 d = _Dict()
 return d

class Enum(metaclass=MyMeta):
 pass

class Color(Enum):
 red = 1
 red = 1  # TypeError: Attempted to reuse key: 'red'

新聞名稱:Python中的enum模塊源碼詳析-創(chuàng)新互聯(lián)
新聞來源:http://weahome.cn/article/gegoh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部