Discuss / Python / 面向对象高级编程【使用枚举类】_作业

面向对象高级编程【使用枚举类】_作业

Topic source

所谓枚举类型是什么呢? 就是这个类型只有可能有几种取值,比如月就只有一月,二月...十二月,星期几就只有星期一...星期日。 和C++不同,python中并没有枚举类型,要实现枚举类型可以使用枚举类。 于是呢首先需要导入模块:

from from enum import Enum,unique

然后有两种方式来定义我们想要的枚举类型: 第一种:

Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))

说明: 在上面的代码中左边的Month和右边的函数第一个参数应该要保持一致,如果不一致就会出现下面的情况: 代码:

a=Enum('b',('one','two','three'))
c=a.one
print(c)

输出:

b.one

可以看到,定义时我们定义的c的值是a.one,但实际上c的值却是b.one。 这样子定义后其实枚举类型是有默认值的,从1开始递增加1。 第二种: 其实我觉得第一种方法就是类似于调用了Enum.__call__(),传入两个参数,一个是类型名,一个是成员名的tuple。然后返回一个类(或是实例?我也不懂)。 那我们可以继承Enum来完成第二种实现,唯一不同的就是可以自定义value。

from enum import Enum, unique

@unique
class Weekday(Enum):
    Sun = 0 # Sun的value被设定为0
    Mon = 1
    Tue = 2
    Wed = 3
    Thu = 4
    Fri = 5
    Sat = 6

嗯还有,还有你只需要写一次Weekday就可以了。 作业的两种方法实现: 第一种:

from enum import Enum

Gender=Enum('Gender',('Male','Female'))
class Student(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

第二种:

#枚举类
from enum import Enum,unique

@unique
class Gender(Enum):
    Male = 0
    Female = 1
class Student(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

  • 1

Reply