摘要:第一個(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
摘要:先簡單介紹下中的元類。元類就是創(chuàng)建類的類,對(duì)于元類來說,類是它的實(shí)例,將返回。中的所有類,都是的實(shí)例,換句話說,是元類的基類。 我在看源代碼的時(shí)候,經(jīng)常蹦出這一句:How does it work!竟然有這種操作?本系列文章,試圖剖析代碼中發(fā)生的魔法。順便作為自己的閱讀筆記,以作提高。 先簡單介紹下Python中的元類(metaclass)。元類就是創(chuàng)建類的類,對(duì)于元類來說,類是它的實(shí)...
摘要:起步上一篇的枚舉類型文末說有機(jī)會(huì)的話可以看看它的源碼。但這樣的方式并不好,范圍大,它包含該類的所有屬性和方法。而不單單是枚舉的命名空間。每個(gè)成員都有名稱屬性和值屬性上述的代碼中,取得的值是。 起步 上一篇 《Python 的枚舉類型》 文末說有機(jī)會(huì)的話可以看看它的源碼。那就來讀一讀,看看枚舉的幾個(gè)重要的特性是如何實(shí)現(xiàn)的。 要想閱讀這部分,需要對(duì)元類編程有所了解。 成員名不允許重復(fù) 這部...
摘要:里面關(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)...
閱讀 789·2021-11-09 09:47
閱讀 1581·2019-08-30 15:44
閱讀 1149·2019-08-26 13:46
閱讀 2114·2019-08-26 13:41
閱讀 1279·2019-08-26 13:32
閱讀 3783·2019-08-26 10:35
閱讀 3532·2019-08-23 17:16
閱讀 462·2019-08-23 17:07