美文网首页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基础进阶-类的多重继承和枚举类!

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

  • Python 面向对象高级编程

    使用__slots__ 使用@property 多重继承 定制类 使用枚举类 使用元类

  • python零基础13:类的继承和定制

    类的定制和继承是什么? 类的继承 类的定制 类的继承要怎么写? 继承基础语法 继承之多层继承 继承的多重继承 类的...

  • 面向对象

    类的定义方法 子类的定义 多重继承 python允许多重继承。

  • python学习日记-2016.7.21

    1.多重继承 python的多重继承可以使一个子类得到多个父类的所有功能,定义多重继承很简单,只需要在定义类时在类...

  • Python面向对象编程(下)

    数据封装、继承和多态是面向对象程序设计中最基础的3个概念,今天学习下Python中的高级特性——多重继承、定制类、...

  • python语法入门五

    类和对象 类和对象 基础 继承:python为多继承 类、类对象和实例对象 当实例对象声明后,再删除类对象,那么该...

  • 35-python中多重继承

    除了从一个父类继承外,Python允许从多个父类继承,称为多重继承。 多重继承的继承链就不是一棵树了,它像这样: ...

  • 面向对象基础二——类的继承

    子类:继承者父类(超类):被继承者 1.继承基础python中类是可以集成的,并且可以多继承 class 类名(父...

  • 类的继承顺序

    python2新式类继承object的类python2经典类未继承任何类的python2新式类和python3的继...

网友评论

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

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