pyhon学习Day18--继承
【知识点】
面向对象的三大特性:继承、多态、封装
【继承】
(1)继承:class Person(Animal): ——括号里的:父类,基类,超类 括号外的:子类,派生类
class Animal:
def __init__(self,name,sex,age):
self.name=name
self.sex=sex
self.age=age class Person(Animal):
pass p1=Person('小明','男',20)
print(p1.__dict__) # {'name': '小明', 'sex': '男', 'age': 20}
(2)初识继承:子类以及子类实例化的对象 可以访问父类的任何方法或变量
#1、类名可以访问父类的所有东西
class Animal:
breath='呼吸' def __init__(self,name,sex,age):
self.name=name
self.sex=sex
self.age=age def eat(self):
print("动物都需要吃东西...") class Person(Animal):
pass print(Person.breath) # 呼吸 (用类名进行访问)
Person.eat(111) # 动物都需要吃东西... (类名访问方法)
#2、子类实例化的对象也可以访问父类所有东西
p1=Person('小明','男',20)
print(p1.breath) # 呼吸 (用子类实例化对象访问父类静态变量)
p1.eat() # 动物都需要吃东西... (用子类实例化对象访问父类方法)
#3、查询顺序

(3)继承关系中执行方法
#1、只执行父类的方法:子类中不要定义与父类用名的方法
#2、只执行子类的方法,在子类中创建这个方法
#3、既要执行父类中的方法也要执行子类中的方法?
两种解决方法:
① 在自己的类中调用父类的__init__方法(Animal.__init__(self,name,sex,age)。
并且,在自己的类中定义def __init__(self,name,sex,age,wing) 在下面添加self.wing=wing
# 既要执行父类中的方法也要执行子类中的方法?
# 解决方法1:
class Animal: def __init__(self,name,sex,age):
self.name=name
self.sex=sex
self.age=age def eat(self):
print("%s吃东西" % (self.name)) class Bird(Animal): def __init__(self,name,sex,age,wing):
# 类名调用方法需要全部参数,若是对象,不需要self
Animal.__init__(self,name,sex,age) #调用父类的__init__方法
self.wing=wing def bark(self):
print("唧唧叫") b=Bird('鹦鹉','公',20,'绿翅膀')
print(b.__dict__) # {'name': '鹦鹉', 'sex': '公', 'age': 20, 'wing': '绿翅膀'}
②super(本类,self).__init__(name,sex,age) #可以简写:super().__init__(name,sex,age)
# 解决方法2:
class Animal: def __init__(self,name,sex,age):
self.name=name
self.sex=sex
self.age=age def eat(self):
print("%s吃东西" % (self.name)) class Bird(Animal): def __init__(self,name,sex,age,wing):
# 类名调用方法需要全部参数,若是对象,不需要self
#Animal.__init__(self,name,sex,age) #调用父类的__init__方法
super().__init__(name,age,wing) #简写 原本:super(Bird,self).__init__(name,sex,age)
self.wing=wing def bark(self):
print("唧唧叫") b=Bird('鹦鹉','公',20,'绿翅膀')
print(b.__dict__) # {'name': '鹦鹉', 'sex': '公', 'age': 20, 'wing': '绿翅膀'}
(4)继承的进阶
继承:单继承、多继承
类:经典类,新式类
#1、新式类:凡是继承object类都是新式类
python3x 所有的类都是新式类。 因为python3x中的类都默认继承object
#2、经典类:不继承object类都是经典类
python2x 所有的类默认都不继承object类,所有的类默认都是经典类
★在python2x中出现如下情况为新式类:
class A(object):
pass
因此,python2x中既有经典类也有新式类
#3、单继承:新式类、经典类查询顺序一样(依次往上)
#4、多继承:
新式类:遵循广度优先
经典类:遵循深度优先
①多继承新式类:class F(D,E): 查询类的继承顺序方法:print(类名.mro())
一条路走到倒数第二级,然后判断,如果其他路能走到终点,则返回走另一条路,否则走到终点。(每个节点只走一次)

②多继承经典类:(一条路走到底)
#5、继承的优点:
节省代码,优化代码
提高代码的复用性,提高代码的维护性,让类与类之间发生关系
【一道面试题】
class A:
name = [] p1 = A()
p2 = A()
p1.name.append(1)
# p1.name,p2.name,A.name 分别是什么?
分析:一般说对象调用类中的静态变量是不能修改的。常规思路肯定认为这里会报错,但是这有个坑,静态变量是可变的数据类型。思路如下:

在名称空间里,A.name获取的是列表的内存地址(房间号),而往其中放入一个数,那是没有问题的。因此有如下结果
class A:
name = [] p1 = A()
p2 = A()
p1.name.append(1)
# p1.name,p2.name,A.name 分别是什么?
print(p1.name) #[1]
print(p2.name) #[1]
print(A.name) #[1]
时间:2020-02-12 16:12:50
pyhon学习Day18--继承的更多相关文章
- Java学习笔记---继承和super的用法
自从换了个视频教学,感觉比原来那个好多了,就是学校网速太渣,好多视频看一会卡半天,只能先看看已经下载的了. 不过也好,虽然不能从开始开始重新开,但是已经看过一次,在看一次也是好的,就当巩固学习了. 继 ...
- Exception类的学习与继承总结
日期:2018.11.11 星期日 博客期:023 Exception类的学习与继承总结 说起来我们上课还是说过的!老师提到了报错问题出现主要分Exception和Error两类!第一次遇见这个问题是 ...
- C++学习15 继承权限和继承方式
C++继承的一般语法为: class 派生类名:[继承方式] 基类名{ 派生类新增加的成员 }; 继承方式限定了基类成员在派生类中的访问权限,包括 public(公有的).private(私有的)和 ...
- css案例学习之继承关系
代码 <html> <head> <title>继承关系</title> <style> body{ color:blue; /* 颜色 * ...
- java学习笔记-继承中super关键字
背景: 在java继承的概念中我们得知,被声明为私有的类成员对所属的类来说仍然是私有的.类之外的任何代码都不能访问,包括子类. super关键字的两种用法: 1.用于调用超类的构造函数: 2.用于访问 ...
- JS高级程序设计学习笔记——继承
我们知道,在OO语言中,继承可分为接口继承和实现继承.而ECMAScript的函数没有签名,不能实现“接口继承”,只能通过原型链实现“实现继承”. 在学习了各种继承模式之后,简单总结一下各种继承模式的 ...
- Java基础学习篇---------继承
一.覆写(重写) 1.含义:子类的定义方法.属性和父类的定义方法.属性相同时候 方法名称相同,参数相同以及参数的个数也相同,此时为覆写(重写) 扩充知识点: 覆盖:只有属性名字和方法名字相同,类型.个 ...
- Java学习笔记--继承和多态(中)
1.通过继承来开发超类(superclass) 2.使用super 关键词唤起超类的构造方法 3.在超类中覆盖方法 4.区分override和overload 5.在Object类中探索toStrin ...
- Java学习笔记--继承和多态(上)
1.通过继承来开发超类(superclass) 2.使用super 关键词唤起超类的构造方法 3.在超类中覆盖方法 4.区分override和overload 5.在Object类中探索toStrin ...
- C++学习_继承覆盖重载
今天通过对实验二继承,重载,覆盖的学习,让我更深一步理解了这些概念的区别. 首先来明确一个概念,函数名即地址,也就是说函数名就是个指针. 编译阶段,编译器为每个函数的代码分配一个地址空间并编译函数代码 ...
随机推荐
- Navicat Premium连接Oracle数据库
记录一下本次配置过程中遇到的问题: 一.服务名 1.找到tnsnames.ors文件: 二.Navicat自带的oci.dll文件版本可能和Oracle数据库不一致,所以使用oracle自带的oci. ...
- C++简单项目--贪吃蛇
在800*600的地图上,蛇的初始长度为3节,用数组记录每一节的位置(每个正方形左上角的坐标),每一节为长度为10的正方形,初始方向向右.随机生成30个障碍物的的位置,随机生成食物的位置.吃到食物之后 ...
- Python库的安装(Windows/Linux通用)
pip安装 最简单的安装方式,自动下载并安装. pip:包管理工具 安装步骤 执行安装命令:pip install <package_name> wheel安装 在网速较差的情况下适用. ...
- linux入门系列3--常见的linux远程登陆管理工具
服务器一般是云服务器或者放置在机房,我们日常工作中通过远程连接工具连接到服务器进行操作,这类工具很多(如SecureCRT.XShell.Putty.FinallShell.TeamViewer以及w ...
- python利用scapy嗅探流量
能实时监测流量, 只显示有问题的流量, 可疑流量要显示出在那个数据包里 所有流量都保存到为pcap 每5000个包保存一个 第3个自动下载到本地 def sniff(count=0, st ...
- python3 三行代码基于HTTP2完美实现APNS推送【详解】
第一次做苹果APNS(Apple Push Notification service)推送,关于APNS推送原理以及证书的获取方式网上已经有许多资料,在此不做过多赘述,需要注意的是证书分为测试证书和正 ...
- Tomcat的性能优化及JVM内存工作原理
JVM性能优化原则:代码运算性能.内存回收.应用配置(影响Java程序主要原因是垃圾回收机制)代码层优化:避免过多循环嵌套.调用和复杂逻辑. Tomcat调优主要内容 1.增加最大连接数 2.调整工作 ...
- Go Web 编程之 Hello World
概述 计划写一个讲 Go Web 编程的系列文章.从基于 net/http 包编写 Go Web 程序开始,讲述处理器,请求,响应等基础知识.然后到框架的使用.中间会穿插一些源码的分析.最后做一个实战 ...
- file_get_contents函数获取不到数据的一种情况
问题: file_get_contents($url) 获取不到数据,尽管URL地址正确,函数使用正确.如下代码 $url = "https://www.baidu.com"; ...
- BFT-SMaRt:用Java做节点间的可靠信道
目录 一.引子 二.名词统一 1. 节点id 2. 节点 3. 本地节点 4. 配置域 5. TTP 6. 陌生域 三.节点服务类 四.节点通信系统概览 五.节点通信层准备 1. 创建socket服务 ...