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


本文摘自php中文网,作者不言,侵删。

本篇文章给大家带来的内容是关于Python中元类与枚举类的介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

一、元类

1、type()函数可以返回对象的类型,也可以创建出新的类型。它可以改变类创建时的行为,实现动态创建类。

1

2

3

4

5

6

7

8

# 第一个参数:类名

# 第二个参数:父类元祖

# 第三个参数:属性、方法

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指定类的元类

1

2

3

4

5

6

7

class MyType(type):

    pass

 

class A(metaclass=MyType):

    pass

 

print(type(A)) # <class '__main__.MyType'>

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

1

2

3

4

5

6

7

8

9

10

11

12

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不可变,而且成员可以直接比较。

1

2

3

4

5

6

7

8

9

10

11

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类来自定义:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

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中元类与枚举类的介绍(代码示例)的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

网络编程详细介绍

Python中关于闭包的使用实例

Python怎么结束循环

Python学习有哪些网站

Python如何安装pickle

Python在文本开头插入一行的实例

解析Python中executemany和序列用法教程

Python 的& 表示什么

怎么在Python安装pil

Python如何将数据导出excel的技巧分享

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...