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学习第十八课——继承,接口继承等的更多相关文章

  1. Python学习第二十八课——Django(templates)

    templates 讲后台得到的数据渲染到页面上:话不多说,先看具体代码. urls: from django.conf.urls import url from django.contrib imp ...

  2. Python学习第二十八课——Django(urls)

    Django框架中的urls配置: 首先通过pycharm创建一个Django项目: 例如要写blog的功能:则在digango_lesson中的urls代码如下: """ ...

  3. JAVA学习第十四课(接口:implements及其基本应用)

    接口: 我们知道抽象类中能够定义抽象方法,也能够定义非抽象方法.当一个抽象类中的方法都是抽象方法的时候,我们就能够定义还有一种表现方式:接口(interface),所以接口是一种特殊的抽象类 接口的出 ...

  4. Python学习二十八周(vue.js)

    一.指令 1.一个例子简单实用vue: 下载vue.js(这里实用1.0.21版本) 编写html代码: <!DOCTYPE html> <html lang="en&qu ...

  5. python 学习笔记十八 django深入学习三 分页,自定义标签,权限机制

    django  Pagination(分页) django 自带的分页功能非常强大,我们来看一个简单的练习示例: #导入Paginator>>> from django.core.p ...

  6. python学习第十五天 -面向对象之继承和多态

    大家都知道面向对象的三大特性:封装,继承,多态.封装特性在上一章节已经讲解过.这一章节主要讲解继承和多态. 继承: 当定义一个类的时候,可以从现有的类进行继承.那么新定义的类可以称为子类,被继承的现有 ...

  7. Python学习第十八篇——低耦合函数设计思想

    import json 2 def greet_user(filename): 3 try: 4 with open(filename) as f_obj: 5 username = json.loa ...

  8. python第三十八课——面向对象(一)

    1.面向对象:(思想) 面向:看.关注.瞅 对象:个体.实体.实例.结果单词:object在python中一些皆对象 面向过程:(思想) 面向:看.关注.瞅 过程:经过.经历.从头到尾 使用一些生活中 ...

  9. Python学习日记(十八) 序列化模块

    什么是序列? 就是每一个元素被有序的排成一列 什么是序列化? 就是将原本的列表.字典等内容转化成字符串的过程 什么时候会用到序列化? 数据存储(把数据放在文件.数据库),网络传输等 序列化的目的 1. ...

随机推荐

  1. 【Vue路由系统详述】

    目录 路由命名 路由参数 路由参数的实现原理 子路由 子路由之append 动态绑定属性 子路由之append升级版 子路由之非append 路由重定向 手动路由 路由钩子 在路径中去掉"# ...

  2. Django - 在settings配置终端打印SQL语句

    LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'level': 'DE ...

  3. js遍历传参到html

    <p id="subp" hidden><button id= "upsub"shiro:hasPermission="sys:me ...

  4. 80端口被system占用

    # 开始 今天配置wampserver 3.0.6的时候 发现右下角的图标一直是红色的 经验告诉我两个服务都没有运行 # 解决思路 wampserver有两个服务 一个是 Apache 服务 一个是 ...

  5. linux中利用fstab实现磁盘分区自动挂载

    如何格式化磁盘.给磁盘分区以及挂载,参考我的另一篇博客: https://www.cnblogs.com/mediocreWorld/p/11123786.html 博客中有一个格式化分区的命令: m ...

  6. java 如何快速的获取浏览量

    最近公司做了一个类似 于发帖,交友圈一个这样的功能 在如何精确快速的获取用户的浏览量,且及时的更新显示,最初我是这样想,把每条帖子内容浏览量放到reids 里面,但是redis只是用来存零时数据,想想 ...

  7. HTML-移动端-rem px vw vh 的转换

    vw/vh rem px 三者的转换(快速入门移动端页面编写) 1:三种单位的转换 2:如何适配移动端的不同设备 前提知识: 手机端的长宽是实际设计过程中的两倍 比如手机端是 750 * 1200 那 ...

  8. VS中消除ANSI API警告

    最近在VS上写网络程序遇到许多问题,因为VS中将许多ANSI中的API都重写了,那些API大多有漏洞或不能支持现在的一些编程需求了,所以在VS中使用会因为警告而不能用. 但一些老API用着比较方便,了 ...

  9. 06-Docker-Image管理操作

    目录 06-Docker-Image管理操作 参考 镜像命名规范 镜像管理命令 1. 拉取推送 2. 查看操作 3. 本地删除 4. 创建标签 5. 导出导入 06-Docker-Image管理操作 ...

  10. 学习JavaScript数据结构与算法---前端进阶系列

    学习建议 1.视频学习---认知 建议:在中国慕课上找"数据结构"相关的视频教程.中国大学MOOC 推荐清华大学.北京大学.浙江大学的教程,可先试看,然后根据自身的情况选择视频进行 ...