python类方法继承_python类的继承

一、概述

面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”,继承的过程,就是从一般到特殊的过程。在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。

继承概念的实现方式主要有2类:实现继承、接口继承。

实现继承是指使用基类的属性和方法而无需额外编码的能力。

接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力(子类重构爹类方法)。

在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。例如,Employee 是一个人,Manager 也是一个人,因此这两个类都可以继承 Person 类。但是 Leg 类却不能继承 Person 类,因为腿并不是一个人。

OO开发范式大致为:划分对象→抽象类→将类组织成为层次化结构(继承和合成) →用类与实例进行设计和实现几个阶段。

二、类的继承

2.1 继承的定义

class Person(object): # 定义一个父类

def talk(self): # 父类中的方法

print("person is talking....")

class Chinese(Person): # 定义一个子类, 继承Person类

def walk(self): # 在子类中定义其自身的方法

print('is walking...')

c = Chinese()

c.talk() # 调用继承的Person类的方法

c.walk() # 调用本身的方法

# 输出

person is talking....

is walking...

2.2 构造函数的继承

如果我们要给实例 c 传参,我们就要使用到构造函数,那么构造函数该如何继承,同时子类中又如何定义自己的属性?

继承类的构造方法:

1.经典类的写法: 父类名称.__init__(self,参数1,参数2,...)

2. 新式类的写法:super(子类,self).__init__(参数1,参数2,....)

class Person(object):

def __init__(self, name, age):

self.name = name

self.age = age

self.weight = 'weight'

def talk(self):

print("person is talking....")

class Chinese(Person):

def __init__(self, name, age, language): # 先继承,在重构

Person.__init__(self, name, age) #继承父类的构造方法,也可以写成:super(Chinese,self).__init__(name,age)

self.language = language # 定义类的本身属性

def walk(self):

print('is walking...')

class American(Person):

pass

c = Chinese('bigberg', 22, 'Chinese')

如果我们只是简单的在子类Chinese中定义一个构造函数,其实就是在重构。这样子类就不能继承父类的属性了。所以我们在定义子类的构造函数时,要先继承再构造,这样我们也能获取父类的属性了。

子类构造函数基础父类构造函数过程如下:

实例化对象c ----> c 调用子类__init__() ---- > 子类__init__()继承父类__init__() ----- > 调用父类 __init__()

821560-20170715150356134-1667016040.png

2.3 子类对父类方法的重写

如果我们对基类/父类的方法需要修改,可以在子类中重构该方法。如下的talk()方法

class Person(object):

def __init__(self, name, age):

self.name = name

self.age = age

self.weight = 'weight'

def talk(self):

print("person is talking....")

class Chinese(Person):

def __init__(self, name, age, language):

Person.__init__(self, name, age)

self.language = language

print(self.name, self.age, self.weight, self.language)

def talk(self): # 子类 重构方法

print('%s is speaking chinese' % self.name)

def walk(self):

print('is walking...')

c = Chinese('bigberg', 22, 'Chinese')

c.talk()

# 输出

bigberg 22 weight Chinese

bigberg is speaking chinese

三、类继承的事例

class SchoolMember(object):

'''学习成员基类'''

member = 0

def __init__(self, name, age, sex):

self.name = name

self.age = age

self.sex = sex

self.enroll()

def enroll(self):

'注册'

print('just enrolled a new school member [%s].' % self.name)

SchoolMember.member += 1

def tell(self):

print('----%s----' % self.name)

for k, v in self.__dict__.items():

print(k, v)

print('----end-----')

def __del__(self):

print('开除了[%s]' % self.name)

SchoolMember.member -= 1

class Teacher(SchoolMember):

'教师'

def __init__(self, name, age, sex, salary, course):

SchoolMember.__init__(self, name, age, sex)

self.salary = salary

self.course = course

def teaching(self):

print('Teacher [%s] is teaching [%s]' % (self.name, self.course))

class Student(SchoolMember):

'学生'

def __init__(self, name, age, sex, course, tuition):

SchoolMember.__init__(self, name, age, sex)

self.course = course

self.tuition = tuition

self.amount = 0

def pay_tuition(self, amount):

print('student [%s] has just paied [%s]' % (self.name, amount))

self.amount += amount

t1 = Teacher('Wusir', 28, 'M', 3000, 'python')

t1.tell()

s1 = Student('haitao', 38, 'M', 'python', 30000)

s1.tell()

s2 = Student('lichuang', 12, 'M', 'python', 11000)

print(SchoolMember.member)

del s2

print(SchoolMember.member)

# 输出

----end-----

just enrolled a new school member [haitao].

----haitao----

age 38

sex M

name haitao

amount 0

course python

tuition 30000

----end-----

just enrolled a new school member [lichuang].

3

开除了[lichuang]

2

开除了[Wusir]

开除了[haitao]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559507.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

添加编译宏_软件开发——编译链接

对于平常的应用程序开发,我们很少需要关注编译和链接过程。我们平常Xcode开发就是集成的的开发环境(IDE),这样的IDE一般都将编译和链接的过程一步完成,通常将这种编译和链接合并在一起的过程称为构建,即使使用命令行来编译一个源代码文件,简单…

shell打开wifi命令_远程执行命令的填坑记录

前言本文主要记录 bash 四种模式的细节,以便于遇到问题时查阅。远程执行出错了最近使用 ansible 比较多,在某次使用 shell 模块远程执行命令的时候老是报 ‘command not found’。但是手动登录到远端机器执行命令是成功的,于是开始思考里面的…

nodejs express use 传值_再也不怕面试官问你express和koa的区别了

前言用了那么多年的express.js,终于有时间来深入学习express,然后顺便再和koa2的实现方式对比一下。老实说,还没看express.js源码之前,一直觉得express.js还是很不错的,无论从api设计,还是使用上都是可以的…

没有工作经验找it_校招和社招有什么区别?没有工作经验,如何找工作?

我们的招聘一般分为社招和校招。社招就是社会上招聘,绝大多数都要有相关的工作经验。而校招则是针对在校大学生的,所以应届毕业生的身份很重要,失去了这个身份,就要进入社招的渠道,面临的压力和要求都要高得多。那么&a…

python输入个人所得税计算_个税起征点上调至5000,用Python算一算少交多少税

原标题:个税起征点上调至5000,用Python算一算少交多少税今天出了一个重磅消息,个税起征点从3500上调到5000啦! 广大IT农民工的生活压力又减轻了一些,有没有 晚上加一个鸡腿,要不要~ 开心归开心,…

hive 行转列和列转行的方法_面试常考!SQL行转列和列转行

关注上方“数据挖掘工程师”,选择星标,关键时间,第一时间送达!行转列,列转行是我们在开发过程中经常碰到的问题。行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 的运算符PIVOT来实现。用传统的…

.net core 装了没生效_王者荣耀:辅助装出现惊天bug?辅助光环对自己无效?

大家好,我是老刘备。今天说的这个bug我已经发现许久,从新版本以来就一直在出现,起初我以为是辅助装的光环改动了,但是最近和我的小伙伴开黑之后也遇到这个bug,才发现不是如此。本期我就来带大家一起看看。辅助光环技我…

python sns绘制回归线_Python数分实战:员工流失情况预测

在很久之前,我有写一个Excel数据分析的实战项目,不晓得大家还记不记得,感兴趣的童鞋可以回看:A九姑娘:Excel数分实战:员工流失率分析​zhuanlan.zhihu.com本次的项目数据依旧是这个,但是我们这次…

go var 一个整数_Go语言学习基础-值、变量、常量

Hello world第一个程序是打印经典的“hello world”信息。保存为hello-world.go文件,在命令行中使用go run命令运行程序。若要构建为二进制文件,则使用go build来实现,然后直接执行二进制文件。结果:$ go run hello-world.gohello…

怎么取消自动格式化_iPhone自动扣费怎么取消?App Store、微信、支付宝关闭自动扣费教程...

经常有网友反馈,自己的手机每月会被不知不觉的被扣钱,但又不知道如何关闭,烦恼不已。其实,现在很多视频、音乐、购物等APP都有会员充值功能,其中不少还包含“自动续费”功能,一旦开启会员,今后就…

c# selenium chrome 文件下载_Selenium 框架原理以及环境安装

Selenium 框架原理图片来自转载 蓝色的图Selenium Language Binding就是我们平时使用的编码语言,包括java、python、C#等。可以看到这些语言并没有直接与Browser Drivers进行通信,而是通过了JSON WireProtocol,这就是webdriver协议 &#xff…

怎么打包图片_怎么将许多张照片打包发到邮箱?

怎么将许多张照片打包发到邮箱?所谓的打包,就是需要你把大量照片文件变成一个压缩文件,类似于放到一个文件夹内,也可以理解为把多张纸质照片装订成一个相册,而在装订过程中需要相应工具才能完成。使用压缩包发送文件&a…

dram sram利用 利用_使用量子力学技术的新型超低功耗存储器或将取代DRAM和Flash...

雷锋网按:业界普遍认为未来从数据中将能挖掘出最大的价值,但要挖掘数据的价值除了需要很强的计算能力之外,数据的存储也非常关键。目前,新型存储器也是领先的企业非常关注的一个方向,兰开斯特大学(Lancaster Universit…

mac地址转换_mac电脑格式转化工具

软件下载【软件名称】:Permute【系统支持】:MAC电脑【位数支持】:32位/64位软件下载地址:链接:https://pan.baidu.com/s/1OAEpnvmkQgqd9MMq3Rucow提取码:tgt7注:阿狸提供用户下载的所有内容均来…

电脑怎么打出冒号符号_Mac小技巧:教你如何在Mac电脑打出command?、option?等特殊符号...

很多Mac新用户不知道该如何打出command⌘、option⌥等特殊符号,而网上好多关于打出Mac特殊符号的教程已经过期,或者繁琐看不懂。今天为大家分享一份简单,一看就懂的Mac电脑怎么打出command⌘、option⌥等特殊符号教程。1.我们打开系统偏好设置…

arraylist下标从几开始_漫画:为什么计算机从 0 开始计数,而不是从 1 开始?

作者 | 漫话编程来源 | 漫话编程当我们想要写一个循环体&#xff0c;期望执行10次的时候&#xff0c;我们会使用以下方式&#xff1a;for (int i0; i<10; i){}可以看到&#xff0c;为了保证循环10次&#xff0c;我们定义了一个整数变量从0开始。还有&#xff0c;当我们定义数…

python 爬虫代码_Python 你见过三行代码的爬虫吗

Python 使用Lassie库&#xff0c;仅编写三行代码就能爬取静态页面上的图片和视频。Python实战教程每次讲爬虫的时候都会从“发送请求” 开始讲&#xff0c;讲到解析页面的时候可能大部分读者都会卡住&#xff0c;因为这部分确实需要一点XPATH或者CSS选择器的前置知识。那么有没…

接口传值后不起作用_聊一聊 API 接口测试

知其然亦知其所以然&#xff0c;接口测试没有那么复杂&#xff0c;但也没有那么简单。本文作者&#xff1a;张敏&#xff0c;软件测试工程师&#xff0c;就职于一家容器平台解决方案公司&#xff0c;负责 DevOps 产品的测试。什么是 APIAPI(Application Programming Interface)…

服务器无法在发送 http 标头之后设置内容类型。_python socket编程预知内容

socket&#xff1a;运用IP地址协议端口 标识一个进程我们知道两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程&#xff0c; 在本地进程通讯中我们可以使用PID来唯一标示一个进程&#xff0c;但PID只在本地唯一&#xff0c;网络中的两个进程PID冲突几率很大 …

自定义键盘组件_一文读懂!iOS系统组件的设计规范全解

一说到组件&#xff0c;大部分初级设计师和中级设计师的脑海里只会蹦出弹窗、Toast及操作列表等具体的概念&#xff0c;没有一套属于自己的组件分类体系&#xff0c;这样对于视觉设计、交互设计或产品设计的系统学习来说都是不利的。iOS14概念设计iOS官方设计指南在介绍组件时是…