Python学习第十八课——继承,接口继承等
1、继承:字面意思
# 继承 : 字面意思 class father:
pass class grandfather:
pass class children(father): # 单继承
pass class children1(father, grandfather): # 多继承
pass
例子
class Dad:
money = 10 def __init__(self, name):
print('巴巴')
self.name = name def hit_son(self):
print('%s 正在打儿子' % self.name) class Son(Dad): # 继承
pass print(Son.money) #
s1=Son('爸爸') # 巴巴
Son.hit_son(s1) # 爸爸 正在打儿子
print(s1.money) #
那么什么时候用继承什么时候用组合那?
1、当类之间又显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好
2、当类之间有很多的功能,提供这些共同的功能能做成基类,用继承比较好
# 伪代码
class Animal: #父类
def eat(self):
print('吃') def drink(self):
print('喝') def shit(self):
print('拉') def pee(self):
print('撒') class Cat(Animal): # 子类
def __init__(self, name): # 派生
self.name = name def cry(self): # 派生
print('喵喵叫') class Dog(Animal): # 子类
def __init__(self, age): # 派生
self.age = age def look_door(self): #派生
print('看门')
2、接口继承
import abc # 接口继承:父类如果是通过abc模块实现的接口,那么继承它的子类必须实现父类中的方法,不然无法实例化对象
# 接口继承主要负责规范子类
class All_file(metaclass=abc.ABCMeta):
@abc.abstractmethod
def read(self):
pass @abc.abstractmethod
def write(self):
pass class Disk(All_file):
def read(self):
print('disk read') def write(self):
print('disk write') class CDrom(All_file):
def read(self):
print('CDrom read') def write(self):
print('CDrom write') class Mem(All_file):
def read(self):
print('Mem read')
def write(self):
print('Mem write') # m1=Mem()
# m1.read() # Mem read
# m1.write() # 此处调用为父类 write方法 m1=Mem() #此时 会报错 因为 Mem中没有write 方法
m1.read() # Mem read
m1.write() # Mem write
3、子类调用父类的方法 就是用父类.父类方法名字() 或者 用 super
方法1 ——父类.父类方法名字()
class Vehicle:
Country='China'
def __init__(self,name,speed,load,power):
self.name=name
self.speed=speed
self.load=load
self.power=power def run(self):
print('开动啦') class Subway(Vehicle):
def __init__(self,name,speed,load,power,line):
# self.name = name
# self.speed = speed
# self.load = load
# self.power = power
Vehicle.__init__(self,name,speed,load,power) # 子类调用父类的init方法 self.line=line
def show_info(self):
print(self.name,self.line,self.speed,self.load,self.power) def run(self):
Vehicle.run(self) # 开动啦 这里也是 子类调用了父类的方法
print('%s %s线 开动了' %(self.name,self.line))
line13=Subway('北京地铁','10km/s',1000000,'电',13) line13.show_info() # 北京地铁 13 10km/s 1000000 电 line13.run() # 北京地铁 13线 开动了
方法2——super
# 方法2 super
class Vehicle:
Country = 'China' def __init__(self, name, speed, load, power):
self.name = name
self.speed = speed
self.load = load
self.power = power def run(self):
print('开动啦') class Subway(Vehicle):
def __init__(self, name, speed, load, power, line):
# self.name = name
# self.speed = speed
# self.load = load
# self.power = power super().__init__(name, speed, load, power) # 用super 调用父类 方法 不需要加 self
self.line = line
#super(Subway,self).__init__(name, speed, load, power) # 也可以这样写 和上面一样 def show_info(self):
print(self.name, self.line, self.speed, self.load, self.power) def run(self):
super().run() # 用super 调用父类 方法 不需要加self
print('%s %s线 开动了' % (self.name, self.line)) line13 = Subway('北京地铁', '10km/s', 1000000, '电', 13) line13.show_info() # 北京地铁 13 10km/s 1000000 电 line13.run() # 北京地铁 13线 开动了
Python学习第十八课——继承,接口继承等的更多相关文章
- Python学习第二十八课——Django(templates)
templates 讲后台得到的数据渲染到页面上:话不多说,先看具体代码. urls: from django.conf.urls import url from django.contrib imp ...
- Python学习第二十八课——Django(urls)
Django框架中的urls配置: 首先通过pycharm创建一个Django项目: 例如要写blog的功能:则在digango_lesson中的urls代码如下: """ ...
- JAVA学习第十四课(接口:implements及其基本应用)
接口: 我们知道抽象类中能够定义抽象方法,也能够定义非抽象方法.当一个抽象类中的方法都是抽象方法的时候,我们就能够定义还有一种表现方式:接口(interface),所以接口是一种特殊的抽象类 接口的出 ...
- Python学习二十八周(vue.js)
一.指令 1.一个例子简单实用vue: 下载vue.js(这里实用1.0.21版本) 编写html代码: <!DOCTYPE html> <html lang="en&qu ...
- python 学习笔记十八 django深入学习三 分页,自定义标签,权限机制
django Pagination(分页) django 自带的分页功能非常强大,我们来看一个简单的练习示例: #导入Paginator>>> from django.core.p ...
- python学习第十五天 -面向对象之继承和多态
大家都知道面向对象的三大特性:封装,继承,多态.封装特性在上一章节已经讲解过.这一章节主要讲解继承和多态. 继承: 当定义一个类的时候,可以从现有的类进行继承.那么新定义的类可以称为子类,被继承的现有 ...
- Python学习第十八篇——低耦合函数设计思想
import json 2 def greet_user(filename): 3 try: 4 with open(filename) as f_obj: 5 username = json.loa ...
- python第三十八课——面向对象(一)
1.面向对象:(思想) 面向:看.关注.瞅 对象:个体.实体.实例.结果单词:object在python中一些皆对象 面向过程:(思想) 面向:看.关注.瞅 过程:经过.经历.从头到尾 使用一些生活中 ...
- Python学习日记(十八) 序列化模块
什么是序列? 就是每一个元素被有序的排成一列 什么是序列化? 就是将原本的列表.字典等内容转化成字符串的过程 什么时候会用到序列化? 数据存储(把数据放在文件.数据库),网络传输等 序列化的目的 1. ...
随机推荐
- JS中constructor属性
constructor属性用于对当前对象的构造函数的引用.可以用来判断对象的类型: <script> var newStr = new String("One world One ...
- maven版cxf集合jetty开发服务端(一)
一.首先新建一个maven项目 二.pom.xml引入依赖 <dependency> <groupId>org.apache.cxf</groupId> <a ...
- HL7解析器
最近做了关于医疗的项目,用了HL7协议,以下是解析的代码: HL7解析器: using System; using System.Text; using System.Xml; using Syste ...
- layui数据表格固定头部和第一列、colspan合并列
刚看到原型图的时候,纳尼?不是跟我开玩笑吧,小女子资历尚浅,还真没做过像这样的功能,然后就是各种找度娘,可是都没有找到合适的,很多都是行合并,真的是头疼呀!再纠结是用VUE实现还是用layui实现好, ...
- Truffle 快速构建 DApp
简单介绍 官网传送门 Truffle是针对基于以太坊的Solidity语言的一套开发框架.本身基于Javascript,使用以太坊虚拟机(EVM)的世界一流的开发环境,用于区块链的测试框架和资产管道 ...
- map遍历删除
List<Object> orderManageList = cacheService.values(key); Iterator<Object> it=orderManage ...
- ASP.NET Core中的依赖注入【上】
此为系列文章,对MSDN ASP.NET Core 的官方文档进行系统学习与翻译.其中或许会添加本人对 ASP.NET Core 的浅显理解 ASP.NET Core支持DI软件设计模式,其是一种为了 ...
- pillow 初级用法
# 转载至:https://www.cnblogs.com/apexchu/p/4231041.html Image类 Pillow中最重要的类就是Image,该类存在于同名的模块中.可以通过以下几种 ...
- PyQt5四大布局方式
1.绝对布局方式'''绝对布局方式,通过move的XY坐标方式来控制控件的位置'''from PyQt5.QtWidgets import *import sys,math class absolut ...
- Intellij IDEA中创建Package变成一级目录
1.创建包,但是出来的却是一级目录 2.因为Compact Middle Packages默认勾选上了,取消掉即可