python-多继承

Posted python我学的很菜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-多继承相关的知识,希望对你有一定的参考价值。

python的新式类和经典类

class A: # 经典类
    pass

class B(object): # 新式类
    pass
  • python2中默认都是经典类,只有显示继承了object才是新式类
  • python3中默认都是新式类,不必显示写出继承object

简单的多继承

class Teacher():

    def knowledge(self):
        print("我可以教人读书")

class parents():

    def property(self):
        print("我有很大的家业")

class Student(Teacher, parents):

    def play(self):
        print("我是一个学生,我会玩")

s = Student()
s.play()  # 学生类自己的玩方法
s.knowledge()  # 老师类的知识方法
s.property()  # 父母类的家业方法
  • 有相同的方法名时,多继承的查找顺序
    • 从左到右查找(继承的父类都只有一层的时候)
class Teacher():

    def knowledge(self):
        print("我可以教人读书")

    def eat(self):
        print("老师吃饭的模样")


class parents():

    def property(self):
        print("我有很大的家业")

    def eat(self):
        print("父母吃饭的模样")

class Student(Teacher, parents):

    def play(self):
        print("我是一个学生,我会玩")


s = Student()
s.eat()

控制台输出:
老师吃饭的模样
  • 有相同的方法名时,多继承的查找顺序(不止有一层,父类上面还有父类,父类上面还有父类的情况)
class Principal():

    def eat(self):
        print("我是一个校长,我是校长的吃饭模样")


class Teacher(Principal):

    def knowledge(self):
        print("我可以教人读书")

    # def eat(self):
    #     print("老师吃饭的模样")

class grandpa():

    def eat(self):
        print("我是爷爷,我是爷爷吃饭的模样")


class parents():

    def property(self):
        print("我有很大的家业")

    def eat(self):
        print("父母吃饭的模样")

class Student(Teacher, parents):

    def play(self):
        print("我是一个学生,我会玩")


# 此时学生类继承了,老师类和父母类,
# 老师类无吃饭方法,父母类有吃饭方法,老师类的父类-校长类有吃饭的方法,父母类的父类-爷爷类有吃饭的方法
s = Student()
s.eat()

控制台输出:
我是一个校长,我是校长的吃饭模样

哇,这样看并不是按照广度优先来查找的呢,其实是按照c3算法来进行查找的,这里c3算法没必要了解,想要了解继承的顺序使用mro方法就可以看到

print(s.mro())
控制台:
[<class \'__main__.Student\'>, <class \'__main__.Teacher\'>, <class \'__main__.Principal\'>, <class \'__main__.parents\'>, <class \'__main__.Grandpa\'>, <class \'object\'>]

以上是关于python-多继承的主要内容,如果未能解决你的问题,请参考以下文章

多线程 Thread 线程同步 synchronized

Python高级语法-多继承MRO相关-多继承顺序(4.5.1)

python之多继承中的一些问题

python-- 继承式多线程守护线程

python 面向对象专题:继承

python 面向对象专题:继承