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

Enum 的源碼

透過上面的實例可以知道透過 __members__ 可以遍歷枚舉類別的所有成員。那為什麼呢?

我們可以先來大致看看Enum 的源碼是如何實現(xiàn)的;Enum 在模組enum.py 中,先來看看Enum 類別的片段

class Enum(metaclass=EnumMeta):
    """Generic enumeration.
    Derive from this class to define new enumerations.
    """

可以看到,Enum 是繼承元類別EnumMeta 的;再看看EnumMeta 的相關(guān)片段

class EnumMeta(type):
    """Metaclass for Enum"""
    @property
    def __members__(cls):
        """Returns a mapping of member name->value.
        This mapping lists all enum members, including aliases. Note that this
        is a read-only view of the internal mapping.
        """
        return MappingProxyType(cls._member_map_)

首先__members__ 方法傳回的是一個包含一個Dict 既Map 的MappingProxyType,並且透過@property 將方法__members__(cls) 的存取方式改變?yōu)榱俗償?shù)的形式,既可以直接透過__members__ 來進(jìn)行訪問了

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