Python(23)-面向对象2-继承,多态

面向对象基本概念2--继承、多态

  • 1.继承基本概念
  • 2.子类重写父类方法
    • 2.1完全重写
    • 2.2扩展父类方法--super()
  • 3.多继承
  • 4.新式类和旧式类
  • 5.多态基本概念
  • 6.类属性、类方法-@classmethod
    • 6.1类属性
    • 6.2类方法@classmethod
  • 7.静态方法@staticmethod
  • 8.案例分析

本系列博文来自学习《Python基础视频教程》笔记整理,视屏教程连接地址:http://yun.itheima.com/course/273.html

面向对象三大特性:封装(定义类的准则)、继承(实现代码的重用)、多态(增加代码的灵活度)

1.继承基本概念

继承 实现代码的重复的使用,将多个类的共有方法封装在父类中,个性类从父亲类中继承共有方法,再封装自己独特的方法就行。

概念:子类拥有父类的所有属性和方法,不需要再次开发,子类要做的就是根据自己的职责,封装特有的属性和方法。

语法:

class 子类名(父类名):

pass

专业术语:子类(派生类)、父类(基类)、继承(派生)

继承的特性:传递性,子类继承了父类及其父类的父类的所有公有属性和公有方法。

子类对象不能直接访问父类的私有属性和私有方法
子类对象需要通过 父类 的公有方法 间接调用父类的 私有属性 和 私有方法

2.子类重写父类方法

2.1完全重写

子类继承自父类,父类的方法不能满足 子类方法 的要求,就需要在子类中对父类方法进行重新编写。

具体实现:在子类中定义一个和父类名字一样的方法,写上需要实现的功能就可以了。

如果子类重写父类方法,在调用时,会调用子类重写的方法

2.2扩展父类方法–super()

子类的方法实现 需要 在父类方法的基础上 进行扩展。

具体实现:在子类中重写父类方法,在需要的位置使用super().父类方法执行父亲类方法的功能,代码的其他位置,针对子类的需求,编写子类特有的代码实现。

super()是一个特殊的类,用来重写父类方法时,调用在父类中封装的方法实现

Python3.x 使用 super().父亲类方法名
Python2.x 使用 super(子类名, self).父类方法名

Python2.0早期版本中没有super()这个类,需要调用父类的方法,需要用父类名.方法(self)

在3.0中支持这种方法,但是不推荐使用父类名.方法(selg)的调用方式。因为父类名改变,之后的调用需要全部替换,不够优雅。

3.多继承

单继承:子类有一个父类
多继承:子类有多个父类 ,即可以继承多个父类的属性和方法。
语法:

class 子类名(父类名1,父类名2)

注意事项:两个父类中封装的方法名相同,同名方法调用的顺序没那么明显。多个父类应该避免同名方法的情况,使程序更加简单和易读取。

python 中的MRO-method resolution order-方法解决顺序:在多继承中判断方法属性的调用路径。可以利用 类名.__mro__ 查看方法的调用顺序(双下划线)。

类名.__mro__

在这里插入图片描述
依照小括号中列的顺序 依次 往后查找所调用方法的顺序(“object”所有Python类的基类)。

4.新式类和旧式类

“object”所有Python类的基类,拥有自己的属性和方法,这些属性和方法以双下划线开头和结尾内置属性和方法(可以使用dir查看对应的属性和方法

dir(对象名)

新式类:以 object 为基类的类,会有许多object封装的内置属性和方法。pyhon3.x会默认创建的类继承至object 类
旧式类:不以object为基类的类,新式类与旧式类的方法搜索顺序是不同的。

python 2.x的版本,需要明示写明继承object。否者为旧式类

class A(object):

pass

养成一个习惯:当一个类没有父类时,都让它继承至object类,确保这个类是新式类。

5.多态基本概念

多态:不同的子类对象,调用相同的父类方法,产生不同的执行结果。
多态使用的两个前提:继承、对父类方法的重写。

不同对象的属性存放在不同的内存空间中,对象的方法与属性的存储方式不同。
一个类在内存中创建的多个对象的方法在内存中只有一份,在调用方法时,将 调用方法的 对象的引用 传递给方法的self 参数,那么self就可以通过对象引用来获取对象属性

=》对象内存空间中存储该对象的属性
=》类的存储空间中存储各个对象的方法

对象被创建之后,内存中就只有一个对象的实实在在的存在–实例
对象=实例、创建对象=实例化

类是一个特殊的对象,定义一个类 就等于 创建了一个类对象。由类对象 创建的对象 称为 实例对象。类对象有自己的属性和方法:类属性和类方法。

6.类属性、类方法-@classmethod

此前所说的方法和属性都属于实例方法和属性,下面介绍的是类属性和类方法,以及静态方法。

6.1类属性

例如:记录这个类创建了多少类对象,每个对象创建时会自动调用__init__方法,那么在初始化方法中改变计数器的值,就能知道这个类创建了多少对象。

属性名=属性值

class Tool(object):num=0def __init__(self,name):self.name=nameTool.num+=1

Python中的属性获取机制
变量.属性名 在属性值的获取中,使用向上查找机制。
类属性的访问:

类名.类属性名

类创建的对象名.类属性名

推荐使用类名访问方式,避免和对象属性的混淆现象,可能会造成在对象外为对象添加一个属性的混淆。

6.2类方法@classmethod

定义类方法

class Tool(object):num=0@classmethoddef show_tool_count(cls):print("工具对象的数量%d"%cls.num)def __init__(self,name):self.name=nameTool.num+=1

类名.方法名 就能调用该方法。(不用实例化该对象?

7.静态方法@staticmethod

在开发程序时,要在类中封装方法,这个方法可以为类方法,也可以为实例方法
要访问实例属性的方法–实例方法
要访问类属性的方法–类方法

如果一个方法既不需要访问实例属性,也不需要访问实例方法,那么这个方法可以封装为静态方法

静态方法不需要传递第一个参数(self,cls),通过类名.方法名来调用方法(不需要创建对象就能调用静态方法)

class Dog(object):@staticmethoddef run():print("小狗要跑步。。")
Dog.run()

8.案例分析

要求:开发一个游戏类
属性:历史最高分(类属性)、玩家姓名(实例属性)
方法:
显示帮助信息–静态方法
显示历史最高分–类属性
开始当前玩家的游戏–实例方法

实例属性+类属性=》定义实例方法

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

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

相关文章

Linux Linux 集群

Linux 集群 Page navigation 什么是集群?集群分类基于 Linux 的集群Linux 服务器集群系统Linux 高性能计算集群集群系统 MOSIX构建 Linux 集群IBM 与 Linux 集群 本专题收集了 Linux 集群相关的文章和教程。 什么是集群? 简单的说,集群(cluster&#x…

机器学习问题总结(04)

文章目录1、MLP的BP过程2、maxpool层BP怎么做的2.1 **mean pooling**2.2 max pooling3、opencv遍历像素的方式,讲两种?4、传统图像处理有了解过吗,比如去噪 特征提取5、问在linux下写过代码吗? 问用了什么软件工具6、LDA&#xff…

持续更新的Zookeeper知识总结

简介 Zookeeper为分布式应用 提供了高效且可靠的分布式协调服务,提供了诸如统一命名服务、发布订阅、负载均衡、配置管理和分布式锁等分布式的基础服务。 设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集&#xf…

Python(24)-面向对象3-可迭代类对象Pokemon

面向对象3-Pokemon demo1.可迭代类对象1.可迭代类对象 想要实现类对象中某些属性/数值的迭代访问,需要在类中定义一个__iter__()方法,和__next__() 的方法(python 2 中为next()方法)。 _iter_()返回值是self, _next_()中遍历完所有的元素后发…

机器学习问题总结(05)

文章目录1. Hadoop、Spark1.1 hadoop1.2 spark1.3 MapReduce1.3.1 概念1.3.1 MapReduce执行流程2、机器学习场景3、推荐系统(预测电影等级)4、CTR(点击通过率 -> 广告)5、SVM5.1 svm的原理5.2 SVM的核技巧6、K-means6.1 K-mean…

基于Socket的UDP和TCP编程介绍

一、概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议。 TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流,TCP套接口是字节流套接口(streamsocket)的一种。 UDP:用户数据报协议。U…

Python(25)-单例设计模式

单例设计模式1.单例设计模式2.__new__方法3.初始动作只执行一次本系列博文来自学习《Python基础视频教程》笔记整理,视屏教程连接地址:http://yun.itheima.com/course/273.html1.单例设计模式 设计模式:不同的问题使用不同的解决套路。学习设…

Linux Socket通信 C/S模型

代码片段(8) [代码] MySocket.h 01#ifndef _MYSOCKET_0623_H 02#define _MYSOCKET_0623_H 03 04#include <sys/socket.h> 05#include <sys/types.h> 06#include <arpa/inet.h> 07#include <netinet/in.h> 08#include <sys/wait.h> 09#include &…

Java多线程——基本概念

线程和多线程 程序&#xff1a;是一段静态的代码&#xff0c;是应用软件执行的蓝本 进程&#xff1a;是程序的一次动态执行过程&#xff0c;它对应了从代码加载、执行至执行完毕的一个完整过程&#xff0c;这个过程也是进程本身从产生、发展至消亡的过程 线程&#xff1a;是比…

textCNN初探

文章目录目录1.什么是textCNN1.1 textCNN 提出的背景1.2 textCNN 合理性分析2.textCNN相比于传统图像领域的CNN有什么特点&#xff1f;3.textCNN例子讲解3.1 参数和超参数3.2 textCNN的数据3.3 textCNN的网络结构定义3.4 代码目录 1.什么是textCNN 1.1 textCNN 提出的背景 我…

Python(28)-异常

异常1.抛出异常2.捕获异常3.依据错误类型捕获异常4.捕获未知错误5.异常捕获的完整语法6.异常传递7.主动抛出异常本系列博文来自学习《Python基础视频教程》笔记整理&#xff0c;视屏教程连接地址&#xff1a;http://yun.itheima.com/course/273.html1.抛出异常 抛出异常&#…

词嵌入初探

文章目录目录1.词嵌入产生的背景1.1 NLP关键&#xff1a;语言的表示1.2 NLP词的表示方法类型1.2.1 独热表示one-hot1.2.2 词的分布式表示distributed representation1.3 NLP中的语言模型1.4 词的分布表示1.4.1 基于矩阵的分布表示1.4.2 基于聚类的分布表示1.4.3 基于神经网络的…

Pytorch(5)-梯度反向传播

自动求梯度1. 函数对自变量x求梯度--ax^2b2. 网络对参数w求梯度- loss(w,x)3. 自动求梯度的底层支持--torch.autograd3.1 Variable3.1.1 Variable构造函数3.1.2 Variable链式求导--backward()3.1.3 Variable反向传播函数--grad_fn3.2 计算图3.2.1 动态创建计算图3.2.2 非叶子节…

VIM使用系列之一——配置VIM下编程和代码阅读环境

作者&#xff1a;gnuhpc from http://blog.csdn.net/gnuhpc http://gnuhpc.wordpress.com/ 本文环境&#xff1a;ubuntu 10.10/vim7.2 前言&#xff1a;一年前写过一篇关于VIM的C/C编程环境的文字&#xff0c;一年中又接触了很多东西&#xff0c;深入使用中发现其实还是需要有…

fastText初探

目录&#xff1a;1、应用场景2、优缺点3、FastText的原理4、FastText词向量与word2vec对比 目录&#xff1a; 1、应用场景 fastText是一种Facebook AI Research在16年开源的一个文本分类器。 其特点就是fast。相对于其它文本分类模型&#xff0c;如SVM&#xff0c;Logistic …

mpiBlast安装详解以及使用说明

Getting mpiblast 现在下载包文件&#xff1a; wget http://www.mpiblast.org/downloads/files/mpiBLAST-1.6.0-pio.tgz 解压包文件&#xff1a; tar xvzf mpiBLAST*.tgz 然后下载ncbi&#xff1a; wget ftp://ftp.ncbi.nih.gov/toolbox/ncbi_tools/old/20061015/ncbi.tar.gz…

Pytorch(6)-设置随机种子,复现模型结果

设置随机种子&#xff0c;复现模型结果1.Python本身的随机因素2.numpy随机因素3.pytorch随机因素在很多情况下&#xff0c;我们希望能够复现实验的结果。为了消除程序中随机因素的影响&#xff0c;我们需要将随机数的种子固定下来。将所有带随机因素的种子全部固定下来后&#…

如何让自己学习?

阶段性反馈机制&#xff08;如何持之以恒、让自己发疯&#xff09; 反馈机制是王者荣耀的核心武器&#xff0c;击杀野怪获得金币&#xff0c;不断地努力&#xff0c;获得奖励是我们不断的玩这个游戏的主要原因&#xff0c;也是人的本能&#xff0c;我什么都得不到凭什么这么做&…

追女孩子必备

当然&#xff0c;首先要知道女孩子的手机号码。 其次&#xff0c;要对她有兴趣啦。 发个短信&#xff1a;“上次跟你聊天很愉快&#xff0c;能否再次邀你出来聊聊天&#xff1f;” 注意&#xff1a;女孩子答应的话&#xff0c;要找的地点是个比较清静的酒吧&#xff0c;暂时别去…

python中使用“if __name__ == '__main__'”语句的作用

首先用最简洁的语言来说明一下 if __name__ __main__: 的作用&#xff1a;防止在被其他文件导入时显示多余的程序主体部分。 先举个例子&#xff0c;如果不用if __name__ __main__: 会发生什么事&#xff1a; 首先在yy.py中调用cs.py #yy.pyimport csprint(引用cs)cs.cs()p…