Python多继承基础

                                     Python多继承基础

 

python是面向对象的语言,它支持多继承,即一个类可以继承多个父类的属性和方法。本书通过对代码的方式解读来解释多继承的概念,详见代码处注释部分。

# 3 显示调用父类的初始化方法,否则会出现属性不可用的异常
class Person(object): #加入object或者空
    '''定义Person类,含name,age,gender属性'''
    def __init__(self,name="Mike",age=20,gender='女'):
        self.name=name
        self.age = age
        self.gender = gender
    def getInfo(self):
        print("{}有{}岁,是{}性".format(self.name,self.age,self.gender))
class Student(Person):
    def __init__(self,name,age,gender,major,grade):
        #super(Student,self).__init__()
        #super().__init__(name,age,gender)
        #super(Student,self).__init__() #仅在name,age,gender已经有默认值时不需要指定参数
        super(Student, self).__init__(name,age,gender)  # 仅Student可指定参数时需要传name,age,gender这三个参数
        self.major = major
        self.grade= grade
    def getInfo(self):
        print("{}就读于{}科的{}".format(self.name,self.major,self.grade))

if __name__ == '__main__':
    s = Student('Tim',19,'女','数学','大二')
    s.getInfo()

执行结果:

Tim就读于数学科的大二
## 4 多继承并初始化属性
class Person(object): #加入object或者空
    '''定义Person类,含name,age,gender属性'''
    def __init__(self,name="Mike",age=20,gender='女'):
        self.name=name
        self.age = age
        self.gender = gender
    def getInfo(self):
        print("{}有{}岁,是{}性".format(self.name,self.age,self.gender))
class Student(Person):
    def __init__(self,name,age,gender,major,grade):
        #super(Student,self).__init__()
        #super().__init__(name,age,gender)
        #super(Student,self).__init__() #仅在name,age,gender已经有默认值时不需要指定参数
        super(Student, self).__init__(name,age,gender)  # 仅Student可指定参数时需要传name,age,gender这三个参数
        self.major = major
        self.grade= grade
    def getInfo(self):
        print("{}就读于{}科的{}".format(self.name,self.major,self.grade))

class Course():
    def __init__(self,coureName,period ):
        self.coureName=coureName
        self.period= period
    def getInfo(self):
        print("{}持续{}".format(self.name,self.period ))

class Study(Student,Course):
    def __init__(self,name,age,gender,major,grade,coureName,period):
        Student.__init__(self,name,age,gender,major,grade)#父类Student初始化方法
        Course.__init__(self,coureName,period)#父类Course初始化方法,object会被先后调用2次


    def studyWith(self):
        print("{}学习了{}".format(self.name,self.coureName))


if __name__ == '__main__':
    sd = Study('Tim',19,'女','数学','大二',"英文","3周")
    #print(Study.__mro__) #显示类的继承关系
    sd.studyWith()
	sd.getInfo()# Study未定义getInfo方法时会按照继承顺序调用父类的该方法,自左到右继承顺序

执行结果:

Tim学习了英文
Tim就读于数学科的大二

 

你可能感兴趣的:(Python案例)