成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Python元類與枚舉類

TigerChain / 3565人閱讀

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

一、元類

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

# 第一個參數(shù):類名
# 第二個參數(shù):父類元祖
# 第三個參數(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)常量定義在一個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常量,默認(rèn)從1開始計數(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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/42708.html

相關(guān)文章

  • How does it work - with_metaclass

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

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

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

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

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

    lauren_liuling 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<