初识python: 继承
继承:可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
通过继承创建的新类称为“子类”或“派生类”。
被继承的类称为“基类”、“父类”或“超类”。
继承的过程,就是从一般到特殊的过程。
要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。
在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。
继承概念的实现方式主要有2类:实现继承、接口继承。
OOP开发范式大致为:划分对象→抽象类→将类组织成层次化结构(继承和合成) →用类与实例进行设计和实现几个阶段。
实例:
仅继承,不做任何其他事。
# class People 经典类写法
# 经典类与新式类的主要区别在继承方式
class People(object): # 新式类写法
def __init__(self,name,age):
self.name = name
self.age = age def eat(self):
print('%s正在吃东西。'%self.name) def sleep(self):
print('%s正在睡觉。'%self.name) # 仅继承,不做任何其他事
class Man(People): # 继承父类 People
pass m1 = Man('simple',25)
m1.eat()
m1.sleep()
继承在做一些自己的事。
# class People 经典类写法
# 经典类与新式类的主要区别在继承方式
class People(object): # 新式类写法
def __init__(self,name,age):
self.name = name
self.age = age def eat(self):
print('%s正在吃东西。'%self.name) def sleep(self):
print('%s正在睡觉。'%self.name) # 继承,在做一些自己的事
class Man(People): # 继承父类 People
def learning(self):
print('%s正在学习。'%self.name) m1 = Man('simple',25)
m1.eat()
m1.learning()
重构父类: 继承,并给父类增加功能(重构父类):先执行父类,在执行子类。(父类和子类都含有相同名称的函数)
# class People 经典类写法
# 经典类与新式类的主要区别在继承方式
class People(object): # 新式类写法
def __init__(self,name,age):
self.name = name
self.age = age def eat(self):
print('%s正在吃东西。'%self.name) def sleep(self):
print('%s正在睡觉。'%self.name) # 重构父类: 继承,并给父类增加功能(重构父类):先执行父类,在执行子类
class Man(People): # 继承父类 People
def learning(self):
print('%s正在学习。'%self.name) def sleep(self):
People.sleep(self)
print('子类要做一些事。')
m1 = Man('simple',25)
m1.sleep() # 先执行父类sleep,返回:simple正在睡觉。 在执行子类sleep,返回:子类要做一些事。
一个父类同时被多个子类继承
# class People 经典类写法
# 经典类与新式类的主要区别在继承方式
class People(object): # 新式类写法
def __init__(self,name,age):
self.name = name
self.age = age def eat(self):
print('%s正在吃东西。'%self.name) def sleep(self):
print('%s正在睡觉。'%self.name) # 定义第一个子类
class Man(People): # 继承父类 People
def learning(self):
print('%s正在学习。' % self.name)
def sleep(self):
People.sleep(self)
print('子类要做一些事。') # 定义第二个子类
class Woman(People):
def sing(self):
print('%s在唱歌'%self.name) m1 = Man('simple',25)
m1.sleep() # simple正在睡觉。 # 子类要做一些事。 w1 = Woman('simgirl',25)
w1.sing()
重构父类,增加子类传入参数个数。
# class People 经典类写法
# 经典类与新式类的主要区别在继承方式
class People(object): # 新式类写法
def __init__(self,name,age):
self.name = name
self.age = age def eat(self):
print('%s正在吃东西。'%self.name) def sleep(self):
print('%s正在睡觉。'%self.name) # 重构父类,增加子类传入参数的个数
class Man(People): # 继承父类 People
def __init__(self,name,age,money):
# People.__init__(self,name,age) # 经典写法,如果更改了父类名称,此处也需要更改
super(Man,self).__init__(name,age) # 形式写法,建议使用此方法。因为,如果更改了父类名称,此处不需要更改
self.money = money
print('%s的初始金额为:%s'%(self.name,self.money))
def learning(self):
print('%s正在学习。' % self.name)
def sleep(self):
People.sleep(self) # 执行父类方法
print('子类要做一些事。') m1 = Man('simple',25,100)
m1.sleep()
m1.eat()
多继承
# 第一个父类
class People(object):
def __init__(self,name,age):
self.name = name
self.age = age
def eat(self):
print('%s正在吃东西。'%self.name) # 第二个父类
class Relation(object):
def meak_friends(self,obj):
print('%s和%s在搞对象。'%(self.name,obj.name)) # name 从People继承,在实例化的时候生成。 class Man(Relation,People):
pass class Woman(People, Relation):
pass m1 = Man('simple',25)
w1 = Woman('simgirl',25) m1.meak_friends(w1)
w1.meak_friends(m1)
继承方式:
python2 经典类按深度优先继承,新式类按广度优先。
python3 都是按照广度优先继承。
class A:
def __init__(self):
print('a') class B(A):
pass
def __init__(self):
print('b') class C(A):
def __init__(self):
print('c') class D(B,C):
pass
def __init__(self):
print('d') d1 = D() # 执行顺序,广度优先:D -> B -> C -> A # python2执行顺序,深度优先:D -> B -> A
初识python: 继承的更多相关文章
- Python开发【第一篇】:初识Python
初识python 一.python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解 ...
- Python开发【第二篇】:初识Python
Python开发[第二篇]:初识Python Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏 ...
- 初识python面向对象
一.初识python面向对象: class Person: #使用class关键字定义一个类 age=0 #类变量(静态变量) def eat(self,food): #定义一个方法 self.age ...
- 孤荷凌寒自学python第三十八天初识python的线程控制
孤荷凌寒自学python第三十八天初识python的线程控制 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.线程 在操作系统中存在着很多的可执行的应用程序,每个应用程序启动后,就可以看 ...
- 孤荷凌寒自学python第二十一天初识python的类
孤荷凌寒自学python第二十一天初识python的类 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 类是面向对象的编程语言非常重要的概念. 编程语言的进化史中从顺序编程到结构化编程,最后才 ...
- Python导出Excel为Lua/Json/Xml实例教程(一):初识Python
Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...
- python 继承中的super
python继承中子类访问父类的方法(包括__init__)主要有两种方法,一种是调用父类的未绑定方法,另一种是使用super(仅仅对于新式类),看下面的两个例子: #coding:utf-8 cla ...
- python继承
Python继承 继承实例: 父类和子类的关系: 继承树: 没有父类就继承object类,不要忘记调用super().__init__来初始化父类 代码: class Person(object): ...
- 篇2 安卓app自动化测试-初识python调用appium
篇2 安卓app自动化测试-初识python调用appium --lamecho辣么丑 1.1概要 大家好!我是lamecho(辣么丑),上一篇也是<安卓app自动化测 ...
- 2017-06-22初识python
初识python #!/usr/bin/env python (python解释器的文件路径)# -*- coding:utf-8 -*- (使用的编码内型)# python 2.7 <需要加第 ...
随机推荐
- 连接opcserver时报错 connecting to OPC Server "****" CoCreateInstance 服务器运行失败
在普通windows系统连接OPCServer可能会报这样的错,排查很长时间,OPCServer跟Client都运行正常,点号录入也正常. 最后发现,其实是OPCServer 与OPCClient 权 ...
- C# 枚举的flags 标志位应用
枚举有个特性叫标志位,使用方法如下 [Flags] enum Foo { a =1, b = 2, c = 4, d = 8 } 每个值需要为2的n次方,保证多个值的组合不会重复. 这样在判断其中一个 ...
- HCL华三模拟器静态路由实验
(copy自我的其他博客网站) 拓扑如下: 实验目的:通过给A.B.C三台路由器配置静态路由,使PC1可以ping通PC2. 实验环境:Windows10 (21H1),HCL(V3.0.1) 实验步 ...
- C# 编写一个小巧快速的 Windows 动态桌面软件
开源自己前段时间使用 C# 编写的 Windows 动态桌面软件,在接下来的博客我将描写一些技术细节和遇到的一些坑.这个软件可以把视频设置成桌面背景播放,不仅如此而且还可以把网页或一个网页文件设置成桌 ...
- 用法总结:NSArray,NSSet,NSDictionary
用法总结:NSArray,NSSet,NSDictionary Foundation framework中用于收集cocoa对象(NSObject对象)的三种集合分别是: NSArray 用于对象有序 ...
- ciscn_2019_s_6
例行检查 没有开启nx保护,考虑用shellcode来做这道题 程序放入ida查看 我们可以输入48个字符覆盖0使printf打印出bp的值 继续看这里,buf的大小实际上只有0x38的大小,但是re ...
- CF450B Jzzhu and Sequences 题解
Content 有一个长度为 \(n\) 的数列 \(\{a_1,a_2,\dots,a_n\}\),满足如下的递推公式: \(i=1\) 时,\(a_1=x\). \(i=2\) 时,\(a_2=y ...
- libevent源码学习(2):内存管理
目录 内存管理函数 函数声明 event-config.h 函数定义 event_mm_malloc_ event_mm_calloc_ event_mm_strdup_ event_mm_reall ...
- SpringBoot整合Netty实现socket通讯简单demo
依赖 <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifa ...
- cmake指定程序输出目录和库文件输出目录和拷贝文件
概述 本文样式环境: win10+cmake 3.18 本文将介绍使用CMAKE配置项目输出目录和 LIbrary项目的输出目录 本文将介绍 cmake的file函数的基础用法之拷贝文件 重点, 这些 ...