1 #object 2 #Python的根类 3 4 #所有的类都直接或者间接的继承object类 5 #这里就只简单的讲两个方法 6 7 #__str__() 8 #返还该对象的字符串表示 9 #为了方便日志的输出 10 #所有对象都可以输出自己所描述的信息 11 #所以可以重写__str__()方法 12 #注意: 13 #如果没有重写__str__()方法 14 #默认返回的是对象的类名以及内存地址等信息 15 16 #而这里重写__str__()就利用到了多态性了 17 #我们不需要对根类object进行修改 18 #只需要在子类中添加一个__str__()来覆盖它就好了 19 20 class person(object): 21 def __init__(self,name,age,skilled): 22 self.name=name 23 self.age=age 24 self.skilled=skilled 25 26 def __str__(self): 27 string="姓名={0} 年龄={1} 擅长位置={2}".format(self.name,self.age,self.skilled) 28 return string 29 30 I=person("L",20,"上单") 31 print(I.__str__()) 32 #这里我们就重构了object中__str__()类 33 #让他存在多态性 34 #但是我们之前说过了 35 #__str__()是object的方法,作用是直接返还数据 36 #那么我就可以不用在实例后面手动输入__str__()了 37 #可以直接通过实例来输出 38 print(I) 39 40 print("//////////////////////////////") 41 42 #第二个常用方法 43 #__eq__(other)方法 44 #当我们使用==来进行比较操作的时候,实际上是调用的__eq__(other)这个方法 45 #而一般来说,他的作用是某个对象是否与此对象相等 46 #在自己使用的过程中,我们常常重构这个方法 47 #让它适合我们后面的运算 48 49 #还是以上面的person1类举例 50 51 class person1(person): 52 def __init__(self,name,age,skilled,ability): 53 super().__init__(name,age,skilled) 54 self.ability=ability 55 56 def __eq__(self,other): 57 if self.skilled == other.skilled : 58 if self.ability> other.ability : 59 string="{0}更强一些".format(self.name) 60 return string 61 else: 62 string="{0}更强一些".format(other.name) 63 return string 64 else: 65 string="位置不同,无法比较" 66 return string 67 68 #这样我们就建立了一个新的类person1 69 #然后,我们在这里重构了__eq__()方法 70 #使得它可以按照我们的标准来判断大小 71 #并返还相应的数据 72 73 I=person1("L",20,"上单",10) 74 O=person1("O",18,"上单",999) 75 B=person1("Z",19,"中单",200) 76 print(I==O) 77 print(I==B) 78 #这样就实现了__eq__()的重构 79 80 print("/////////////////////////////////////") 81 82 #枚举类 83 #枚举类用来管理有限的常量集合 84 #枚举类继承自enum.Enum类, 85 #这样才能说明这类是枚举类 86 #而枚举类中会定义多个常量成员,注意,是常量 87 #而且枚举类不需要,也不能使用构造方法 88 89 class week(object): #这里就定义的是一个普通的类 90 pass 91 92 import enum #注意,这里需要调用enum包才能使用枚举类 93 class week_1(enum.Enum): 94 Monday=7 95 Tuesday=4 96 Wednesday=2 97 Thursday=3 98 Friday=1 99 Saturday=9 100 Sunday=9 101 102 #day=week_1() 103 #这里会直接报错 104 #原因是,枚举类不能使用 类名() 的形式表示 105 #而是要以 类名.常量名 来使用 106 #而且这里不是实例化 107 #而是相当于一个赋值 108 #只是赋值上去的不是一个单纯的数据,而是一个 name + value 的数据集上去 109 #所以正确的调用方式是 110 111 day=week_1.Wednesday 112 print(day) #week_1.Wednesday 113 print(day.name) #Wednesday 114 print(day.value) #2 115 116 print("//////////////////////////////") 117 118 #限制枚举类 119 #为了储存和使用方便,枚举类中的常量成员取值应该是整数 120 #而且每一个常量成员应该有不同的取值 121 #为了使得枚举类常量成员只能使用整数类型 122 #可以使用enum.IntEnum作为枚举父类。 123 124 #这里我们看到 125 #解释中提到了枚举类中常量成员的取值在限制枚举类中是整数 126 #这是不是意味着不是限制枚举类可以以随意设置取值 127 128 129 import enum #注意,这里需要调用enum包才能使用枚举类 130 class week_2(enum.Enum): 131 Monday=7 132 Tuesday=4.0 133 Wednesday=2+7j 134 Thursday='A' 135 Friday="我?" 136 #Saturday=9+'A' 137 #语法不允许,和C不一样 138 Sunday=9-1.25 139 d1=week_2.Monday 140 print(d1) 141 print(d1.name) 142 print(d1.value) 143 144 d2=week_2.Tuesday 145 print(d2) 146 print(d2.name) 147 print(d2.value) 148 149 d3=week_2.Wednesday 150 print(d3) 151 print(d3.name) 152 print(d3.value) 153 154 d4=week_2.Thursday 155 print(d4) 156 print(d4.name) 157 print(d4.value) 158 159 d5=week_2.Friday 160 print(d5) 161 print(d5.name) 162 print(d5.value) 163 164 d6=week_2.Sunday 165 print(d6) 166 print(d6.name) 167 print(d6.value) 168 169 #从上面的多个例子中 170 #我们发现这里值都可以使用任何数据 171 172 #所以这里我们再建立一个限制性枚举类 173 174 @enum.unique 175 class week_3(enum.IntEnum): 176 Monday=1 177 Tuesday=2 178 Wednesday=5 179 #Test=5.5 180 #Test='A' 181 #Test=2+5j 182 #这些都是不行的 183 dd1=week_3.Monday 184 print(dd1.name) 185 print(dd1.value) 186 187 dd2=week_3.Wednesday 188 print(dd2.name) 189 print(dd2.value) 190 191 #这样都是没有问题的 192 #dd2.value=5.0 193 #这里就是直接报错了 194 #因为它不能修改数据 195 #注意:就算是修改成和原来一样的数据也是不可以的 196 197 print("//////////////////////////////") 198 199 #使用枚举类 200 #可以提高程序可读性,特别是在比较的时候 201 202 @enum.unique 203 class week_4(enum.IntEnum): 204 Mon=1 205 Tus=2 206 Wed=3 207 Thu=4 208 Fri=5 209 #我们这就建立了一个限制枚举类 210 #枚举类通过其值可以直接拿来使用 211 day2=week_4.Wed 212 #这里我们的d2的数据值就是wed的3 213 if d2 == week_4.Mon: 214 print("今天是周一") 215 else: 216 print("今天不是周一哦")