PHP前端开发

Python中元类与枚举类的介绍(代码示例)

百变鹏仔 4小时前 #Python
文章标签 中元

本篇文章给大家带来的内容是关于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):    passclass A(metaclass=MyType):    passprint(type(A)) # <class '__main__.MyType'>

另一种指定函数元类(转载):

立即学习“Python免费学习笔记(深入)”;

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'))# 输出: Falseprint(hasattr(Foo, 'BAR'))# 输出:True

二、枚举类

在开发中经常设置多组常量,Enum可以把一组相关常量定义在一个class中,且class不可变,而且成员可以直接比较。

from enum import Enumpay_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 = 3print(PayMethods['CASH'])  # PayMethods.CASHprint(PayMethods(1))  # PayMethods.WEIXINprint(PayMethods.ALIPAY.value)  # 2