python基础进阶-类的多重继承和枚举类!

一、多重继承,可以理解为一个子类有多个父类,并继承这些父类的属性和方法。

class ClassName(Class1,Class2MixIn,Class3MixIn…)

– Class1 为ClassName的父类,Class2MixIn和Class3MixIn为它的后父类,也就是它的附加的功能(这是我这么定义的)。

– 这种附加功能的设计方式,我们称为MixIn,所以给这些后父类的末尾添加“MixIn”,以便更好的识别。

# 实例1

# 创建Person父类,并绑定参数name

注:想学习Python的小伙伴们

可以进群:984632579 领取从0到1完整学习资料 视频 源码 精品书籍 一个月经典笔记和99道练习题及答案

class Person(object):

def __init__(self,name):

self.name=name

# 创建TeachingMixIn类,使其继承object,并建立t_run方法

class TeachingMixIn(object):

def t_run(self):

print(‘teaching…’)

# 创建LearningMixIn类,使其继承object,并建立s_run方法

class LearningMixIn(object):

def s_run(self):

print(‘learning…’)

# 创建EatMixIn类,使其继承object,并建立eat方法

class EatMixIn(object):

def eat(self):

print(‘eating…’)

# 创建Teacher类,使其继承父类Person、类TeachingMixIn(扩展功能)和类EatMixIn(扩展功能)

class Teacher(Person,TeachingMixIn,EatMixIn):

def my(self):

print(‘{0} is a teacher.’.format(self.name))

# 创建Student类,使其继承父类Person、类LearningMixIn(扩展功能)和类EatMixIn(扩展功能)

class Student(Person,LearningMixIn,EatMixIn):

def my(self):

print(“{0} is a student”.format(self.name))

a=Teacher(‘Zhangsan’)

a.my()

a.eat()

a.t_run()

print(‘+’*15)

b=Student(‘Lisi’)

b.my()

b.eat()

b.s_run()

>>>

Zhangsan is a teacher.

eating…

teaching…

+++++++++++++++

Lisi is a student

eating…

learning…

# 类Student继承了父类Person,又继承了扩展类LearningMixIn(Student独有的类)。类Teacher继承了父类Person,并继承了扩展类Teaching。

# Student和Teacher类都继承了EatMixIn类

当我们在使用多重继承的时候,如果继承的父类中有相同的属性或者方法的时候,会输出哪个属性或者执行哪个方法呢?我们实例看一下。

# 实例2

class A(object):

name=’AAA’

def run(self):

print(‘This is A.’)

class B(object):

name=’BBB’

def run(self):

print(‘This is B.’)

class C(A,B):

pass

a=C()

print(a.name)

a.run()

>>>

AAA

This is A.

# 父类 A 和后父类 B 都有同样的属性 name 和同样的方法 run 。python会优先使用父类 A 中的,而后父类(附加父类)的属性和方法就没用了。

总结:当我们使用多重继承的时候,一定要注意多重继承中父类的属性和方法是否和后父类重复,如果重复,优先使用父类中的属性和方法。

二、枚举类

red=1

green=2

white=3

black=4

yellow=5

blue=6

如果我们想要通过 1-6 来表示这六种颜色,可以通过常量表达。

# 实例1

RED=1

GREEN=2

WHITE=3

BLACK=4

YELLOW=5

BLUE=6

print(RED,GREEN,WHITE,BLACK,YELLOW,BLUE)

>>> 1 2 3 4 5 6

# 通过调用这些常量,正确的表达出来了

但是虽然这些常量使用起来简单方便,可我们知道,常量是可以改变的,这就增加了一些不稳定因素。我们可以使用枚举类来解决这些问题。

# 实例2

# 导入enum模块的Enum类

from enum import Enum

#创建Colour类,使其父类为Enum类

class Colour(Enum):

red=1

green=2

white=3

black=4

yellow=5

blue=6

n=1

# 迭代出Colour的所有成员

for j in Colour:

print(Colour(n),end=’ ‘)

n+=1

print(‘ ‘)

# 迭代出Colour的所有成员的值

for i in Colour:

print(i.value,end=’ ‘)

>>>

Colour.red Colour.green Colour.white Colour.black Colour.yellow Colour.blue

1 2 3 4 5 6

# enum类是可以通过迭代取出所有的成员,还可以通过值来找出成员的名称

所以,使用枚举类可以反着来取出成员,也可以通过成员来取出值,这是很方便的。而且,这里成员的值是不变的,增加了我们代码的稳定性。

    原文作者:编程新视野
    原文地址: https://www.jianshu.com/p/2c19780bad15
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞