类的继承和多态

布啦豆 7180

类即对象,就像哺乳动物,属性是可以遗传的,这点就是类的继承

儿子相对父亲,就像是子类相对父类,子类有父类的全部属性,而且子类也可以重新定义自己的属性值,来覆盖父类的属性值

当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类,而被继承的class称为基类、父类。

如下示例代码:

class a():
    def run(self):
        print('a class...')
class b(a):
    def run(self):
        print('b class...')
class c(a):
    def hello(self):
        print('hello c')
  • 首先定义一个a类,里面有一个run()方法
  • 然后定义一个b类,继承与a类,而且里面有一个和a类一样的方法run,且会覆盖a的run方法
  • 再定义一个c类,同样继承a类,但是并未重写run方法,而是重新定义一个新的方法hello

下面来初始化类的值,以及使用函数名看看情况

ac = a()
bc = b()
cc = c()
ac.run()
# 结果:a class...
bc.run()
# 结果:b class...
cc.run()
# 结果:a class...
cc.hello()
# 结果:hello c

从上面结果看,可以得到如下结论: - ac打印是a class...,正是a类中定义的输出 - bc打印是b class...,说明b的重新定义run并覆盖了父类的run方法 - cc打印是a class...,c并没有定义run,它的run方法是从父类a里面继承过来的,自己定义了hello方法

继承:子类从继承的父类中,得到父类的全部属性和方法


接下来就是类的特性——多态

多态,意思就是多种形态,这里用动物来作比较最合适

首先定义一个动物的父类:

class Animal():
    def get_type(self):
        print("Animal...")

然后定义一个猴子类,继承动物:

class Monkey(Animal):
    def get_type(self):
        print("Monkey...")

再定义一个小白鼠类,继承动物:

class Mouse(Animal):
    def get_type(self):
        print("Mouse...")

接着定义一个人类,继承猴子:

class People(Monkey):
    def get_type(self):
        print("People...")

定义好三个类之后,然后定义一个适用动物类的函数:

def get_animal(animal):
    animal.get_type()

get_animal函数接收一个动物类的对象参数,然后运行它的get_type()方法

最后实例化刚才定义的所有类,然后调用get_animal函数看看

animal = Animal()
monkey = Monkey()
mouse = Mouse()
people = People()
get_animal(animal)
# 结果:Animal...
get_animal(monkey)
# 结果:Monkey...
get_animal(mouse)
# 结果:Mouse...
get_animal(people)
# 结果:People...

以上代码就是检测类的多态。都是基于同一个父类,所以肯定有父类的方法,但此时他们不再是父类或者是同一种类,而是各种形态的类。

这也就是类的多态性【有点万变不离其宗的意思】


一个小白肯定会问的小问题:定义一个类,括号内有的是空,有的是放入父类。我记得每个类都会继承object类,为什么有的可以写空呢?

答:python3隐式继承了object,所以python3中写不写继承object都是没有区别的 。【不过在Python2.x是有区别的】

版权声明:允许转载,转载请注明出处 —— 《Python3教程》: 类的继承和多态

Copyright @2016-2017 | 赣ICP备16003025号