枚举型和元类

Posted 哈哈哈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了枚举型和元类相关的知识,希望对你有一定的参考价值。

枚举型

from enum import Enum
Month=Enum(Month,(Jan,Feb,Mar,Apr,May,jun,Jul))
for name,member in Month.__members__.items():
    print(name,-,member,,,member.value)

Jan - Month.Jan , 1
Feb - Month.Feb , 2
Mar - Month.Mar , 3
Apr - Month.Apr , 4
May - Month.May , 5
jun - Month.jun , 6
Jul - Month.Jul , 7

可以从枚举类派生自定义类:

from enum import Enum, unique
# unique 检测有么有重复值
@unique
class Weekday(Enum):
    sun=0
    mon=1
    tue=2
    wed=3
    thu=4
    fri=5
    sat=6

 

 

元类:

python是动态语言,函数和类的定义不是编译时定义的,而是运行时动态创建的,动态创建class 使用type()函数。

type() 既可以返回一个对象的类型,又可以创建新的类型, 例如:

#定义方法
def getname(self, name=haha):
    print(%s.% name)

# ‘Name’ class 名称, 第二个参数继承类,第三个参数方法名称和函数的绑定
Name=type(Name,(object,),dict(getName=getname))

 

除了type 动态创建类之外, 要控制类的创建行为,还可以使用metaclass:

先创建metaclass, 就可以创建类,最后创建实例

metaclass 允许创建类和修改类,类可以看出metaclass创建的实例

以上是关于枚举型和元类的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中使用 attr 模块和元类

Grails - 使方法全局可用和元类编程

单例类和元类

Python基础入门自学——12--new方法和元类

自定义元类和元类的用途

类和元类