python基础-类的继承
继承:承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类.
继承的过程,就是从一般到特殊的过程.要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现
继承概念的实现方式主要有2类:实现继承、接口继承.
实现继承是指使用基类的属性和方法而无需额外编码的能力
接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力(子类重构爹类方法)
组合方式实现多继承
# -*- coding:utf-8 -*- __author__ = 'shisanjun' class School(object): def __init__(self,name): self.name=name def sayhi(self): print("school name",self.name) class SchoolMember(object): menber=0 #公有属性 def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex self.enrool() #每个子类都运行 def enrool(self): print('%s has enroll' %self.name) SchoolMember.menber+=1 #累计增加,不能写this.menber+=menber这样写只会在子类调用的时候加1,没有传到父类 def tell(self): #打印所有用户信息,实现如下 print("-----info %s-----" %self.name) for v,k in self.__dict__.items(): #返回子类的 所有成员属性的字典 print("%s:\t%s" %(v,k)) def __del__(self): print("%s has del" %self.name) SchoolMember.menber-=1 class Teacher(SchoolMember): def __init__(self,name,age,sex,salary,course,school): #SchoolMember.__init__(self,name,age,sex) #经典类写法==SchoolMember.__init__(self,name,age,sex) super(Teacher,self).__init__(name,age,sex ) #新类式类写法 self.salary=salary self.course=course self.school=school #组合继承,实现多继承 def teach(self): print("school:%s teacher course %s" %(self.school.name,self.course)) class Student(SchoolMember): def __init__(self,name,age,sex,tuition,course): SchoolMember.__init__(self,name,age,sex) self.tuition=tuition self.course=course def pay_tuition(self): print("the student pay ",self.tuition) school=School("南京大学") t=Teacher("shi",23,"F",15000,"python",school) #组合继承,实现多继承 s=Student("san",26,'M',3000,"python") t.teach() """ shi has enroll san has enroll school:南京大学 teacher course python shi has del san has del """
多继承
# -*- coding:utf-8 -*- __author__ = 'shisanjun' class A(object): def request(self): print('A.request') def finish(self): print('A.finish') class C(A): def request(self): self.process() print('C.request') def finish(self): print('C.finish') class B(object): def request(self): print('B.request') def process(self): print('B.process') self.finish() def finish(self): print('B.finish') class D(C, B): pass obj = D() obj.request() """ B.process C.finish C.request """