美文网首页ITS·黑客
【Python】笔记20(枚举类)

【Python】笔记20(枚举类)

作者: 阿凯Awesome | 来源:发表于2017-05-20 17:15 被阅读34次

通过Enum类(需要从enum模块导入Enum类),定义常量而不是变量。

获得Month类型的枚举类

直接使用Month.Jan来引用一个常量,或者枚举它的所有成员:

value属性时自动赋给member的int常量,默认从1开始计数。

@unique,从enum导入的装饰器可以帮助检查保证没有重复值。

访问枚举类型:

单单print(Weekday.Mon)只能返回一个属性名,可以理解为Weekday.Mon只是Weekday的一个属性,print(Weekday['Tue'])应是同理在调用Weekday的Tue属性,print(Weekday(1))应是同理在调用Weekday中第一个属性;如果print(Weekday.Mon.value)则返回的是属性的值。

此时的属性名即是常量,value只是在调用常量的值。

动态语言,不是编译时定义的,而是运行时动态创建的。

type()函数可以查看一个类型或变量的类型。对于例子中的Hello是一个class,那它的类型就是type,而h是一个实例,那他的类型就是class Hello。

创建class的方法就是使用type()函数。

通过type()函数来创建Hello类:

第一步先定义函数,以便后面放入到类中;第二步创建Hello类,type()函数第一个参数是类名称,第二个参数是以tuple的方式继承父类集合(tuple单元素时要多加一个逗号),dict这是对class的方法名称与函数邦洞,将fn这个函数绑定传入到hello这个方法名上。

以上是动态的编译。

metaclass,要控制类的创建行为,可以用metaclass(元类)。它允许创建类或者修改类。

先定义metaclass,就可以创建类,最后创建实例。可以把类看成是metaclass创建出来的“实例”。

按照习惯,metaclass的类名称总是以metaclass结尾,以便表示这是一个metaclass。

如例子中为通过mateclass来为Mylist添加add方法。正常情况下,可以直接写,而不需要通过metaclass。但在ORM(Object Relational Mapping,对象-关系映射,把关系数据库的一行映射为一个对象,一个类对应一个表),写代码可以更简单。

__new()__方法接收到的,第一个参数是,当前准备创建的类的对象;第二个参数是类的名字;第三个参数是类基础的父类集合;第四个是类的方法集合;

ORM框架:?

(因过于抽象,暂且跳过)

相关文章

  • 【Python】笔记20(枚举类)

    通过Enum类(需要从enum模块导入Enum类),定义常量而不是变量。 获得Month类型的枚举类 直接使用Mo...

  • Python_枚举

    一、枚举 Enum类 Python中所有枚举类型都是enum模块下的Enum类的子类。 枚举中的标识最好全部使用大...

  • kotlin 枚举类Enum

    枚举类,代数类型学习笔记###

  • python枚举类

    定义 直接使用 继承Enum 使用@uniqu可以检查没有重复值 访问

  • Python>枚举类

    参考文章

  • Python 枚举类

    Python v3.8.5 如果想将一个类定义为枚举类,只需要令其继承自enum 模块(内置)中的 Enum 类即...

  • ##Java学习笔记之基础类库笔记

    Java学习笔记之基础类库笔记 Object 所有类,数组,枚举类的父类 Objects(Java7新增) 工具类...

  • Python学习笔记九(枚举)

    枚举 python 3中新增相比字典以及类变量,枚举用来抽象类型具有优势有1、值不可变;2、防止相同值 获取枚举类...

  • python收藏的干货

    python百例——Python文集类Python 学习笔记——Python文集类

  • (10) python中的枚举

    在python中,枚举的本质是一个类,所有枚举类都是Enum的子类枚举值不能动态更改且标签唯一,标签唯一但是数值不...

网友评论

    本文标题:【Python】笔记20(枚举类)

    本文链接:https://www.haomeiwen.com/subject/ddypxxtx.html