class vihecle: def __init__(self,name,speed,load): self.name=name self.speed=speed self.load=load def show_info(self): print("开动啦") class b(vihecle): def __init__(self,name,speed,load,line): super().__init__(name,speed,load)#调用了父类的方法,self自动传递了,调用父类的方法使用supper() self.line=line def show_info(self): super().show_info() print("我是来自子类的") b1=b("北京地铁","1000km/s",10000,13) b1.show_info()
class school: def __init__(self,name,addr): self.name=name self.addr=addr def zhao(self): print("学校正在招生") class course: def __init__(self,name,price,period,school): self.name=name self.p=price self.pp=period self.school=school s1=school("oldbay","beijing") s2=school("oldbay","lanjing") s3=school("oldbay","gansu") c1=course("linux",10,"1h",s1) print(c1.__dict__) print(c1.school.name)#类的组合
class school: x=1 def __init__(self,name,add,type): self.name=name self.add=add self.type=type def tell_info(self): print("学校的详细介绍") s=school("清华","北京","公立") print(s.__dict__) print(school.__dict__) s.tell_info()#实例调用类方法的时候python自动传进了一个参数,但是类不行 school.tell_info(s)#这儿必须自己传参数,因为是类调用类方法,所以不会自动传进参数。
类的组合用来类和类之间的关联,将小类做成大类。两个类之间没有共同点,但是类和类之间有关联,这就用类的组合来实现。
组合的定义
代码重用的重要方式除了继承之外还有另外一种方式,即:组合
组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合。
class BirthDate: def __init__(self,year,month,day): self.year=year self.month=month self.day=day class Couse: def __init__(self,name,price,period): self.name=name self.price=price self.period=period class Teacher: def __init__(self,name,gender,birth,course): self.name=name self.gender=gender self.birth=birth self.course=course def teach(self): print('teaching') p1=Teacher('egon','male', BirthDate('1995','1','27'), Couse('python','28000','4 months') ) print(p1.birth.year,p1.birth.month,p1.birth.day) print(p1.course.name,p1.course.price,p1.course.period) ''' 运行结果: 27 python 28000 4 months '''
继承同时含有两种含义:
含义一:继承基类的方法,并且做出自己的改变或者扩展(代码重用),意义不大。
含义二:申明某个子类兼容于某基类,定义一个接口类,子类继承接口类,并且实现接口中定义的方法。
接口中只是申明函数,但是不能实现函数,用来规范子类,只是所有继承接口的类必须实现接口中的方法。
import abc
必须给接口中的方法添加装饰器,@abc.abstractmethod.
在接口定义中加上参数methodclass=abc.ABCMeta
继承顺序:python中可以继承多各类,但是Java中只能继承一个类。
在python3中,继承的顺序是广度优先。(和数据结构中的广度优先是由区别的,不能混淆)
在python2中,继承的顺序有广度优先和深度优先。
用组合的方式建立了类与组合的类之间的关系,它是一种‘有’的关系,比如教授有生日,教授教python课程
当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好
class vihecle: def __init__(self,name,speed,load): self.name=name self.speed=speed self.load=load def show_info(self): print("开动啦") class b(vihecle): def __init__(self,name,speed,load,line): super().__init__(name,speed,load)#调用了父类的方法,self自动传递了,调用父类的方法使用supper() self.line=line def show_info(self): super().show_info() print("我是来自子类的") b1=b("北京地铁","1000km/s",10000,13) b1.show_info()
多态:
不同对象调用相同的方法,产生不一样的结果,这就是多态。