Python之浅谈继承
继承
继承介绍
如何使用继承
class 类名(父类1,父类2):
pass
概念:是一种新建类的方式,继承了一个类,类中的属性和方法就在子类中
- 父类/基类
- 子类/派生类
新式类:只要继承了object类,就是新式类,再python3中,默认继承object类
- Python3中:默认继承object
class A:
pass - python2中,需要显示的指定继承object
经典类:没有继承object的类,就是经典类
- python3中没有经典类
- python2中才有
利用继承减少代码冗余,菱形问题
减少代码冗余
class Public:#父类
school ='electronic'
class Teacher(Public):#子类
def __init__(self, course_choice):
self.course_choice = course_choice
class Student(Public):#子类
def __init__(self, name):
self.name= name
菱形问题
class A(object):
def test(self):
print('from A')
class B(A):
def test(self):
print('from B')
class C(A):
def test(self):
print('from C')
class D(B):
def test(self):
print('from D')
class E(C):
def test(self):
print('from E')
class F(D,E):
# def test(self):
# print('from F')
pass
print(F.mro())
[<class 'main.F'>, <class 'main.D'>, <class 'main.B'>, <class 'main.E'>, <class 'main.C'>, <class 'main.A'>, <class 'object'>]
在新式类中是广度优先
在经典类中是深度优先
重用父类方法
方法一:指名道姓的方式,跟继承关系无关
class Person(object):
def __init__(self,name,age):
self.name=name
self.age=age
def init_1(self,name,age):
self.name=name
self.age=age
class Student:
school = 'yyyy'
def __init__(self,name,age,course):
#指名道姓的使用Person的__init__方法
# Person.__init__(self,name,age)
# init_1(self,name,age)
self.course=course
stu=Student('nick',19,'python')
print(stu.name)
方法二:通过super关键字,跟继承关系有关
class Person(object):
def __init__(self,name,age):
self.name=name
self.age=age
class Student(Person):
school = 'yyyy'
def __init__(self,name,age,course):
#super()相当于得到了一个特殊对象,第一个参数不需要传,调用绑定方法,会把自己传过去
########## self不需要传,不需要传
# super().__init__(name,age)
#看到别人这么写:super(类名,对象) 在py3中为了兼容py2
#在py3中这么写和省略写法完全一样
#在py2中必须super(Student,self)写
super(Student,self).__init__(name,age)
self.course=course
总结
有继承关系的时候,通常用super,指名道姓的方式在什么情况下用?
1.没有继承关系
2.如果继承了多个父类,super是按照mro列表找,现在想指名道姓的用某个父类的某个方法,就需要指名道姓的使用
Python之浅谈继承的更多相关文章
- Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理
基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客 QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...
- Python实例浅谈之五Python守护进程和脚本单例运行
一.简介 守护进程最重要的特性是后台运行:它必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符.控制终端.会话和进程组.工作目录以及文件创建掩码等:它可以在系统启动时从启动脚本/etc/rc ...
- Java学习笔记(8)---Scanner类,浅谈继承
1.Scanner类: a.定义: java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入. Scanner s = new Scanner(S ...
- 【python】浅谈包
python中的包可以理解为模块的集合.每个包也既可以为单包也可以有多个小包组成. Python中的package定义很简单,其层次结构与目录的层次结构相同,但是每个package必须包含一个__in ...
- 【python】浅谈encode和decode
对于encode和decode,笔者也是根据自己的理解,有不对的地方还请多多指点. 编码的理解: 1.编码:utf-8,utf-16,gbk,gb2312,gb18030等,编码为了便于理解,可以把它 ...
- Python实例浅谈之三Python与C/C++相互调用
一.问题 Python模块和C/C++的动态库间相互调用在实际的应用中会有所涉及,在此作一总结. 二.Python调用C/C++ 1.Python调用C动态链接库 Python调用C库比较简单,不经过 ...
- python itertool 浅谈迭代工具
1.概述 Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数. 首先,我们看看itertools提供的几个“无限”迭代器: import itertools natuals ...
- Python之浅谈多态和封装
目录 组合 什么是组合 为什么使用组合 多态和多态性 多态 什么是多态? 多态性 好处 多态性 什么是多态性 封装 封装是什么意思? 隐藏 如何用代码实现隐藏 python 实际上是可以访问隐藏属性的 ...
- Python之浅谈模块
目录 模块的四种形式 什么是模块 import和from......import 循环导入 模块的搜索路径 Python文件的两种用途 random模块 模块的四种形式 什么是模块 模块就是一个p ...
随机推荐
- Java实现 LeetCode 486 预测赢家
486. 预测赢家 给定一个表示分数的非负整数数组. 玩家1从数组任意一端拿取一个分数,随后玩家2继续从剩余数组任意一端拿取分数,然后玩家1拿,--.每次一个玩家只能拿取一个分数,分数被拿取之后不再可 ...
- Java实现 洛谷 P1046 陶陶摘苹果
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = ...
- java实现日程表
[编程题] 某保密单位机要人员 A,B,C,D,E 每周需要工作5天,休息两天. 上级要求每个人每周的工作日和休息日必须是固定的,不能在周间变更. 此外,由于工作需要,还有如下要求: 1. 所有人的连 ...
- java实现第四届蓝桥杯梅森素数
梅森素数 题目描述 如果一个数字的所有真因子之和等于自身,则称它为"完全数"或"完美数" 例如:6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 ...
- 快速幂解法--x^n
class Solution{ public: double myPow(double x,int n){ if(==x || n==) return ; if(n == ) return x; if ...
- bfs算法总结
BFS(广度优先搜索) 类似于树的按层遍历 常用实现方法:队列 模板: 注意: 只能用来求解无权图的最短路径问题 队列:用来存储每一层便利得到的节点 标记:对于遍历过的结点,应将其标记,以防重复访问 ...
- Java线程变量问题-ThreadLocal
关于Java线程问题,在博客上看到一篇文章挺好的: https://blog.csdn.net/w172087242/article/details/83375022#23_ThreadLocal_1 ...
- SimpleDateFormat 和 Calendar 对于时间的处理
import java.text.SimpleDateFormat;import java.util.Date;public class test { public static void main( ...
- SpringBoot爬坑系列
1.日志篇 现象 由于日志配置采用原来SpringMVC项目中的log4j.properties 文件,日志采用springboot自带的jar包会出现打印不出日志的情况. 解决 引入原日志包 < ...
- RabbitMQ系列之【CentOS6.5安装RabbitMQ】
环境准备 操作系统:CentOS 6.5 Final RabbitMQ: 3.1.5 Python: 2.7.11 ErLang: R16B02 安装预环境(少什么安装什么) yum -y insta ...