类的继承,深度优先于广度优先

深度优先与广度优先

#coding=utf-8
class people(object):
    # def __init__(self):
    #     self.age = 45
    #     print('People')
    def sleep(self):
        print(123)

class Relation(object):
    def __init__(self):
        print('Relation')

class Man(people,Relation):
    def __init__(self):
        super(Man,self).__init__() #这里继承了两个类,但是只会执行people的构造方法,不会执行relation的,如果people没有构造函数就走relation
    def sleep(self):
        #people.sleep(self)
        super(Man,self).sleep()
        print(456)

# a = Man()
# a.sleep()
#深度优先于广度优先
"""
python2中经典类是深度优先,新式类是广度优先,python3中都是广度优先
"""
class A(object):
    def __init__(self):
        print('A')

class B(A):
    def __init__(self):
        print('B')

class C(A):
    def __init__(self):
        print('C')

class D(B,C):
    # def __init__(self):
    #     pass
    """
    深度优先:若D没有初始化函数,先去找B,B也没有去找A,A也没有再找C
    广度优先:若D没有初始化函数,先去找B,B也没有去找C,C也没有去找A
    """

  

#coding=utf-8
"""
新式类与旧式类的一个有区别的地方,主要表现在多个类继承上,
新式类遵循的是广度优先,而旧式类遵循的是深度优先
python2中经典类按照深度优先继承的,
pyhton3中,经典类和新式都是按照广度优先继承的
"""

#class people:  #经典类
class people(object): #新式类

    def __init__(self,name,age):
        self.name = name
        self.age = age

    def eat (self):
        print '%s is rating'%self.name

    def talk(self):
        print '%s is talking'%self.name

    def sleep(self):
        print '%s is sleeping'%self.name

class Relation(object):

    def make_friends(self,obj):
        print '%s like %s'%(self.name,obj)

class Man(people,Relation):

    def __init__(self,name,age,money):
        #people.__init__(self,name,age)
        super(Man,self).__init__(name,age)   #新式类写法
        self.money = money

    def play_game(self):
        print '%s is playing game'%self.name

    def sleep(self):
        people.sleep(self)    #重写父类方法
        print 'man is sleep'

class Woman(people,Relation):

    def song(self):
        print '%s is sing a song'%self.name

man = Man('zq','25','1500')
man.sleep()

class School(object):
    def __init__(self,name,addr):
        self.name = name
        self.addr = addr
        self.student =[]
        self.teacher =[]

    def enroll(self,stuobj):
        print 'service for%s'%stuobj.name
        self.student.append(stuobj)

class SchoolMember(object):
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    def tell(self):
        pass

class Teacher(SchoolMember):
    def __init__(self,name,age,sex,salary,course):
        super(Teacher,self).__init__(name,age,sex)
        self.salary = salary
        self.course = course

    def tell(self):
        super(tell,self).tell()
        print  '''info of teacher:%s' 
                 name: %s
                 age:%s
                 salary:%s
                 course:%s
               '''%(self.name,self.name,self.age,self.salary,self.course)

    def teach(self):
        print '%s is teaching '%self.name

class Student(SchoolMember):
    def __init__(self,name,age,sex,schoolid,course):
        super(Student, self).__init__(name,age,sex)
        self.id = schoolid
        self.course = course

    def tell(self):
        print  '''info of student:%s' 
                 name: %s
                 age:%s
                 id:%s
                 course:%s
               '''%(self.name,self.name,self.age,self.schoolid,self.course)
原文地址:https://www.cnblogs.com/qiangayz/p/8577376.html