美文网首页python入门基础学习程序员
python基础进阶-类的多重继承和枚举类!

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

作者: 编程新视野 | 来源:发表于2019-01-16 14:33 被阅读1次

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

    class ClassName(Class1,Class2MixIn,Class3MixIn...)

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

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

    # 实例1

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

    注释:全面教程,入门书籍,学习源码可以添加小编学习群943752371直接获取。

    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类是可以通过迭代取出所有的成员,还可以通过值来找出成员的名称

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

    相关文章

      网友评论

        本文标题:python基础进阶-类的多重继承和枚举类!

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