美文网首页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(枚举类)

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