這篇文章帶給大家的內容是關於Python中元類別與枚舉類別的介紹(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
一、元類別
1、type()函數可以傳回物件的類型,也可以建立新的類型。它可以改變類別創建時的行為,實現動態創建類別。
# 第一个参数:类名 # 第二个参数:父类元祖 # 第三个参数:属性、方法 A = type("A",(object,),{"name":"zhou"}) a = A() print(type(A)) # <class 'type'> print(type(a)) # <class '__main__.A'> print(a.name) # zhou
2、可以透過metaclass指定類別的元類別
class MyType(type): pass class A(metaclass=MyType): pass print(type(A)) # <class '__main__.MyType'>
另一種指定函數元類別(轉載):
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#
以上是Python中元類別與枚舉類別的介紹(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!