国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python元類與枚舉類

TigerChain / 3524人閱讀

摘要:第一個參數類名第二個參數父類元祖第三個參數屬性方法可以通過指定類的元類另一種指定函數元類轉載指定元類輸出輸出二枚舉類在開發中經常設置多組常量,可以把一組相關常量定義在一個中,且不可變,而且成員可以直接比較。

一、元類

1、type()函數可以返回對象的類型,也可以創建出新的類型。它可以改變類創建時的行為,實現動態創建類。

# 第一個參數:類名
# 第二個參數:父類元祖
# 第三個參數:屬性、方法
A = type("A",(object,),{"name":"zhou"})
a = A()
print(type(A)) # 
print(type(a)) # 
print(a.name) # zhou

2、可以通過metaclass指定類的元類

class MyType(type):
    pass

class A(metaclass=MyType):
    pass

print(type(A)) # 

另一種指定函數元類(轉載):

def upper_attr(future_class_name, future_class_parents, future_class_attr):
    attrs = ((name, value) for name, value in future_class_attr.items() if not name.startswith("__"))
    uppercase_attr = dict((name.upper(), value) for name, value in attrs)
    return type(future_class_name, future_class_parents, uppercase_attr)

class Foo(metaclass = upper_attr): # 指定元類
    bar = "bip"

print(hasattr(Foo, "bar"))
# 輸出: False
print(hasattr(Foo, "BAR"))
# 輸出:True
二、枚舉類

在開發中經常設置多組常量,Enum可以把一組相關常量定義在一個class中,且class不可變,而且成員可以直接比較。

from enum import Enum

pay_methods = Enum("PayMethods",("CASH","WEIXIN","ALIPAY","UNIONPAY",))

for name, member in pay_methods.__members__.items():
    print(name, ",", member, ",", member.value)
# CASH , PayMethods.CASH , 1
# WEIXIN , PayMethods.WEIXIN , 2
# ALIPAY , PayMethods.ALIPAY , 3
# UNIONPAY , PayMethods.UNIONPAY , 4
# value屬性則是自動賦給成員的int常量,默認從1開始計數。

也可以通過繼承Enum類來自定義:

from enum import Enum, unique


@unique  # 幫助我們檢查是否重復
class PayMethods(Enum):
    CASH = 0  # 設置CASH.value = 0
    WEIXIN = 1
    ALIPAY = 2
    UNIONPAY = 3


print(PayMethods["CASH"])  # PayMethods.CASH
print(PayMethods(1))  # PayMethods.WEIXIN
print(PayMethods.ALIPAY.value)  # 2

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42708.html

相關文章

  • How does it work - with_metaclass

    摘要:先簡單介紹下中的元類。元類就是創建類的類,對于元類來說,類是它的實例,將返回。中的所有類,都是的實例,換句話說,是元類的基類。 我在看源代碼的時候,經常蹦出這一句:How does it work!竟然有這種操作?本系列文章,試圖剖析代碼中發生的魔法。順便作為自己的閱讀筆記,以作提高。 先簡單介紹下Python中的元類(metaclass)。元類就是創建類的類,對于元類來說,類是它的實...

    testbird 評論0 收藏0
  • Python 的 enum 模塊源碼分析

    摘要:起步上一篇的枚舉類型文末說有機會的話可以看看它的源碼。但這樣的方式并不好,范圍大,它包含該類的所有屬性和方法。而不單單是枚舉的命名空間。每個成員都有名稱屬性和值屬性上述的代碼中,取得的值是。 起步 上一篇 《Python 的枚舉類型》 文末說有機會的話可以看看它的源碼。那就來讀一讀,看看枚舉的幾個重要的特性是如何實現的。 要想閱讀這部分,需要對元類編程有所了解。 成員名不允許重復 這部...

    muddyway 評論0 收藏0
  • Python模塊文檔學習之抽象基abc模塊

    摘要:里面關于抽象類的相關介紹中并沒有提供抽象類與抽象方法,但是提供了內置模塊來模擬實現抽象類。主要類或函數這是用來生成抽象基礎類的元類。繼承方式中的抽象類模塊定義了幾個抽象類。 PEP里面關于抽象類的相關介紹:https://www.python.org/dev/pe...python中并沒有提供抽象類與抽象方法,但是提供了內置模塊abc(abstract base class)來模擬實現...

    lauren_liuling 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<