成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python元類與枚舉類

TigerChain / 3525人閱讀

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

一、元類

1、type()函數(shù)可以返回對(duì)象的類型,也可以創(chuàng)建出新的類型。它可以改變類創(chuàng)建時(shí)的行為,實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建類。

# 第一個(gè)參數(shù):類名
# 第二個(gè)參數(shù):父類元祖
# 第三個(gè)參數(shù):屬性、方法
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)) # 

另一種指定函數(shù)元類(轉(zhuǎn)載):

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
二、枚舉類

在開發(fā)中經(jīng)常設(shè)置多組常量,Enum可以把一組相關(guān)常量定義在一個(gè)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屬性則是自動(dòng)賦給成員的int常量,默認(rèn)從1開始計(jì)數(shù)。

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

from enum import Enum, unique


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


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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42708.html

相關(guān)文章

  • How does it work - with_metaclass

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

    testbird 評(píng)論0 收藏0
  • Python 的 enum 模塊源碼分析

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

    muddyway 評(píng)論0 收藏0
  • Python模塊文檔學(xué)習(xí)之抽象基abc模塊

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

    lauren_liuling 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<