面向对象----继承,组合
来源:互联网 发布:函数的定义c语言 编辑:程序博客网 时间:2024/05/29 09:30
继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类
python中类的继承分为:单继承和多继承
class Father:#父类 def __init__(self,name): self.name=name def foo(self): return 'foo from {} '.format(self.name)class Mom:#父类 def __init__(self,age): self.age=ageclass Son(Father,Mom):#子类,继承Father,Mom的数据属性和函数属性 def __init__(self,name,age,hobby): Father.__init__(self,name) Mom.__init__(self,age) self.hobby=hobby
查看继承print(Son.__bases__)#(<class '__main__.Father'>, <class '__main__.Mom'>)print(Father.__bases__)#(<class 'object'>,)print(Mom.__bases__)#(<class 'object'>,)
提示:如果没有指定基类,python的类会默认继承object类,object是所有python类的基类,它提供了一些常见方法(如__str__)的实现。==============================================
组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合。
class People:# def __init__(self,name,age,sex):# self.name=name# self.age=age# self.sex=sex# def walk(self):# print('{} walking'.format(self.name))## class Fraction:# def __init__(self,fraction):# self.fraction=fraction# def frac(self):# print('分数是{}'.format(self.fraction))# class Course:# def __init__(self,course):# self.course=course## def cour(self):# print('课程是{}'.format(self.course))## class Date:# def __init__(self,year,mun,day):# self.year=year# self.mun=mun# self.day=day# def date(self):# print('{}年{}月{}日'.format(self.year,self.mun,self.day))# class Teacher(People):# def __init__(self,name,age,sex,course,year,mun,day,level,salary):# People.__init__(self,name,age,sex)# self.course=Course(course) #组合# self.date=Date(year,mun,day)# self.level=level# self.salary=salary# def teach(self):# print('{} is teaching'.format(self.name))## class Student(People):# def __init__(self,name,age,sex,course,year,mun,day,fraction,group):# People.__init__(self,name,age,sex)# self.course=Course(course)# self.date=Date(year,mun,day)# self.fraction=Fraction(fraction)# self.group=group# def study(self):# print('{} is studing'.format(self.name))### t=Teacher('mack',11,'mul','python',1999,12,12,11,3000)# s=Student('jack',22,'mul','python',1988,1,1,100,11)# t.walk()# s.study()# t.course.cour()# s.fraction.frac()
继承有两种用途:一:继承基类的方法,并且做出自己的改变或者扩展(代码重用)二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能。实践中,继承的第一种含义意义并不很大,甚至常常是有害的。
因为它使得子类与基类出现强耦合。继承的第二种含义非常重要。
它又叫“接口继承”。接口继承实质上是要求“做出一个良好的
抽象,这个抽象规定了一个兼容接口,使得外部调用者无需关心
具体细节,可一视同仁的处理实现了特定接口的所有对象”——
这在程序设计上,叫做归一化。归一化使得高层的外部使用者可以
不加区分的处理所有接口兼容的对象集合——就好象linux的泛文
件概念一样,所有东西都可以当文件处理,不必关心它是内存、
磁盘、网络还是屏幕(当然,对底层设计者,当然也可以区分出
“字符设备”和“块设备”,然后做出针对性的设计:细致到什么
程度,视需求而定)。抽象类
import abcclass File(metaclass=abc.ABCMeta): @abc.abstractmethod def read(self): pass @abc.abstractmethod def write(self): passclass Txt(File): def read(self): pass def write(self): pass
```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
阅读全文
0 0
- 面向对象----继承,组合
- 面向对象:类组合还是类继承?
- 面向对象:类组合还是类继承?
- 面向对象之继承和组合浅谈
- 面向对象之继承和组合浅谈
- 面向对象设计中的继承、组合、聚合
- 面向对象之继承和组合浅谈
- 面向对象之继承和组合浅谈
- 面向对象(11)(继承组合)
- ]面向对象(11)继承(组合)
- 面向对象之继承和组合浅谈
- 面向对象之继承和组合浅谈
- 面向对象之继承和组合浅谈
- OC面向对象—继承 & 组合
- 面向对象之继承和组合浅谈
- 面向对象之继承和组合浅谈
- 面向对象之寄生组合继承
- 面向对象之继承与组合
- JS异步处理方案总结
- 如何提交bug,小白请进~
- 熟悉又陌生的HTTPS
- 2257: [Jsoi2009]瓶子和燃料
- 喜欢的博客
- 面向对象----继承,组合
- nuxt中vuex的使用
- windows10下安装tensorflow
- H5码的五子棋制作心得(部分)
- Redis 事务 (5)
- POJ 1228 Grandpa's Estate(稳定凸包)
- [MoonML]-决策树ID3分类器
- Linux下c语言实验Websocket通讯 含客户端和服务器测试代码
- 如何将bug杀死在摇篮里?