首頁  >  文章  >  後端開發  >  Python中元類別與枚舉類別的介紹(程式碼範例)

Python中元類別與枚舉類別的介紹(程式碼範例)

不言
不言轉載
2018-12-04 17:37:002208瀏覽

這篇文章帶給大家的內容是關於Python中元類別與枚舉類別的介紹(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

一、元類別

1、type()函數可以傳回物件的類型,也可以建立新的類型。它可以改變類別創建時的行為,實現動態創建類別。

# 第一个参数:类名
# 第二个参数:父类元祖
# 第三个参数:属性、方法
A = type("A",(object,),{"name":"zhou"})
a = A()
print(type(A)) # <class &#39;type&#39;>
print(type(a)) # <class &#39;__main__.A&#39;>
print(a.name) # zhou

2、可以透過metaclass指定類別的元類別

class MyType(type):
    pass

class A(metaclass=MyType):
    pass

print(type(A)) # <class &#39;__main__.MyType&#39;>

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

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中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除

相關文章

看更多