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. ...
随机推荐
- Java Web实现使用浏览器从服务器下载文件(后台)
Java Web实现 使用浏览器从服务器下载文件. 下面实现两种情况的下载,需求如下: 需求(一):1.用户在页面填写表单. 2.填写完成后,选择下载,将表单内容发往后台. 3.后台根据内容生产一个文 ...
- P&R 2
Floorplan: 要做好floorplan需要掌握哪些知识跟技能? 通常,遇到floorplan问题,大致的debug步骤跟方法有哪些? 如何衡量floorplan的QA? Floorplan是后 ...
- 粪发涂墙-tomcat
tomcat 的 JAVA_OPTS 分析设置 快乐生活你我 2019-08-12 06:07:00 JAVA_OPTS ,顾名思义,是用来设置JVM相关运行参数的变量. 1.JVM:JAVA_OPT ...
- RocketMq-粪发涂墙1.0
角色 说明 Producer 生产者,用于将消息发送到RocketMQ,生产者本身既可以是生成消息,也可以对外提供接口,由外部来调用接口,再由生产者将受到的消息发送给MQ. Consumer 消费者, ...
- 安卓开发:Android Studio自动import
我只想说,真好用!哈哈,提高效率的好东西. 参考: [https://blog.csdn.net/pjdd123/article/details/80953669] [https://www.cnbl ...
- Git储藏工作现场
假设你现在在dev分支工作,此时你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,你当前工作只进行到一半,还没法提交,预计完成还需1天时间 ...
- centos openoffice 的启动
https://blog.csdn.net/resolute123/article/details/77304973
- 克隆虚拟机后ip配置
(1)出错原因: 错误:No suitable device found: no device found for connection "System eth0" 原因:克隆虚拟 ...
- layui-表格宽度自适应
不设置表格宽度,表格默认全屏 可以通过以下方式设置表格宽度
- python ui自动化之元素定位和常用操作
做ui自动化的最基础的就是页面元素定位了,如果连页面元素都定位不到,自动化从何谈起呢?接下来我们就看看页面元素定位的方法吧!(这里就用百度页面来进行演示) 一.最通用的几种定位方式: 1.通过id定位 ...