2024.6.9 二

Python类的继承

class 子类(父类1,父类2,…)
子类继承父类的和方法,即如果什么都不改,就相当于父类改了个名字接着用

构造函数继承与改写
当在Python中出现继承的情况时,一定要注意初始化函数_init_的行为

如果子类没有定义自己的初始化函数,父类的初始化函数会被默认调用;但是如果要实例化子类的对象,则只能传入父类的初始化函数对应的参数,否则会出错。

# 定义父类:Parent
class Parent(object):def __init__(self, name):self.name = name
# 定义子类Child ,继承父类Parent       
class Child(Parent):pass
c = Child("init Child") 

此时Child类实例化时,由于子类没有初始化,此时父类的初始化函数就会默认被调用且必须传入父类的参数 name,相当于父类的构造函数来到子类里补充了子类缺失的构造

如果子类定义了自己的初始化函数,而在子类中没有显示调用父类的初始化函数,则父类的属性不会被初始化

class Parent(object):def __init__(self, name):self.name = name
# 子类继承父类        
class Child(Parent):# 子类中没有显示调用父类的初始化函数def __init__(self,sex):self.sex=sex
# 将子类实例化  
c = Child('male')
print(c.name)

在子类中没有显示调用父类的初始化函数,则父类的属性不会被初始化,因而此时调用子类中name 属性不存在,调用name会报错,而调用sex会正常打印

如果子类定义了自己的初始化函数,在子类中显示调用父类,子类和父类的属性都会被初始化

class Parent(object):def __init__(self, name):self.name = name
class Child(Parent):def __init__(self,sex,name):self.sex=sexsuper(Child,self).__init__(name)
c = Child('male','jerry')
print(c.name)
print(c.sex)

现在c就有了Parent类的name和Child类的sex两个属性

方法的改写

class Parent:        # 定义父类def myMethod(self):print ('调用父类方法')
class Child(Parent): # 定义子类def myMethod(self):print ('调用子类方法')
c = Child()          # 子类实例
c.myMethod()         # 子类调用重写方法

在类的继承中,如果重定义某个方法,该方法会覆盖父类的同名方法

SUPER()函数详解
在类的继承中,如果重定义某个方法,该方法会覆盖父类的同名方法,但有时,我们希望能同时实现父类的功能,这时,我们就需要调用父类的方法了。
比如下面这个例子:

class Bird:def __init__(self):self.hungry = Truedef eat(self):if self.hungry:print 'Ahahahah'else:print 'No thanks!'
class SongBird(Bird):def __init__(self):self.sound = 'Squawk'def sing(self):print self.song()
sb = SongBird()
sb.sing()    # 能正常输出
sb.eat()     # 报错,因为 songgird 中没有 hungry 特性

为了让我们可以在覆盖掉父类方法的同时使用父类的方法,我们就可以使用super()函数

class SongBird(Bird):def __init__(self):super(SongBird,self).__init__()self.sound = 'Squawk'def sing(self):print self.song()

使用时要注意,super()里面的参数是子类,super查找的是给出的参数的父类
上例里就不能super(Bird,self),这样写的话就找的是Bird的父类了

多态问题
即,一个子类同时继承自多个父类的多继承问题------class 子类(父类1,父类2,…)
需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。


#类定义
class people:name = ''age = 0__weight = 0#定义构造方法def __init__(self,n,a,w):self.name = nself.age = aself.__weight = wdef speak(self):print("%s 说: 我 %d 岁。" %(self.name,self.age))#另一个类,多继承之前的准备
class speaker():topic = ''name = ''def __init__(self,n,t):self.name = nself.topic = tdef speak(self):print("我叫 %s,我是一个演说家,我演讲的主题是 %s"%(self.name,self.topic))#多继承
class sample(speaker,student):a =''def __init__(self,n,a,w,g,t):student.__init__(self,n,a,w,g)speaker.__init__(self,n,t)test = sample("Tim",25,80,4,"Python")
test.speak()   #方法名同,默认调用的是在括号中参数位置排前父类的方法

然而,很多时候我们发现,这样容易导致父类的构造函数被多次调用,所以我们常使用super函数来搭配使用,而当我们在super里面写了多个父类时,我们需要注意,此时super遵顼MRO顺序(广度优先)

MRO顺序指,出现如:
—> B —
A --| |–> D
—> C —
的顺序时,不会从B(或C)直接到A,而是先把同一层的遍历完成后,再进入到下一层
能进入下一层时,先检查是否还有同层,只有同一层的走完后(广度)才会往下(深度)

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

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

相关文章

如何获取当前dll或exe模块所在路径?

有时我们需要在当前运行的dll或exe模块中去动态加载当前模块同路径中的另一个库,或者启动当前模块同路径中的另一个exe程序,一般需要获取当前模块的路径,然后去构造同路径下目标模块的绝对路径,然后通过该绝对路径去加载或启动该目…

高速USB转串口芯片CH343

CH343封装 截止目前,主要封装有 SOP16: CH343G QFN16: CH343P ESSOP10: CH343K,截止24年6月未生产 CH343串口速度 最高串口速度: 6Mbps,比CH340的2M,快3倍 1、概述 参考版本:1E CH343 是一个 USB 总线的转接芯片,…

使用ORM Bee时, Condition, SuidRich的方法中, 字段是否支持使用Orders::getName的形式,避免使用静态字段串写死字段值

使用ORM Bee时, Condition, SuidRich的方法中, 字段是否支持使用Orders::getName的形式,避免使用静态字段串写死字段值. 可以使用V2.4.0 的ConditionExt和SuidRichExt 需要引用BeeExt. 示例代码如下: package org.teasoft.exam.bee.osql.ext24;import org.teasoft.bee.osql…

Yolov9比其他yolo版本的改进

YOLOv9模型在多个方面进行了改进,根据搜索结果,以下是一些主要的改进点: 1. **可逆函数角度的分析**:YOLOv9从可逆函数的角度理论上分析了现有的CNN架构,基于这种分析,设计了PGI(可编程梯度信息…

4、Spring之Bean生命周期~获取Bean

4、Spring之Bean生命周期~获取Bean 获取BeantransformedBeanName()方法BeanFactoryUtils的transformedBeanName方法canonicalName()方法 getObjectForBeanInstance()方法getObjectFromFactoryBean()方法 获取Bean Spring Bean的生命周期首先会经过扫描,然后回经过合…

git本地配置及IDEA下Git合并部分文件

目录 1、IDEA 下 Git 合并部分文件 2、分支合并忽略特定文件步骤 3、git本地配置 1、IDEA 下 Git 合并部分文件 1.1Git 下存在两个分支,foo 和 bar 分支,想要把 bar 分支上的部分文件合并到 foo 分支: 首先切换到 foo 分支,点击右下角的 …

Java Web学习笔记31——Maven介绍

Maven:Java项目的构建工具。 Maven: Maven是Apache旗下的一个开源项目,是一款用于管理和构建Java项目的工具。 Apache软件基金会,成立于1999年7月,是目前世界上最大的最受欢迎的开源软件基金会,也是一个专…

Java | Leetcode Java题解之第132题分割回文串II

题目&#xff1a; 题解&#xff1a; class Solution {public int minCut(String s) {int n s.length();boolean[][] g new boolean[n][n];for (int i 0; i < n; i) {Arrays.fill(g[i], true);}for (int i n - 1; i > 0; --i) {for (int j i 1; j < n; j) {g[i]…

深度学习中几种常见数据标准化方法

目录 一、介绍 二、总结 三、详情 1. StandardScaler 2. MinMaxScaler 3. RobustScaler 4. MaxAbsScaler 5. Normalizer 6. QuantileTransformer 7. PowerTransformer 8. Log Transform 四、示例 五、心得 一、介绍 方法名称缩放范围适用条件StandardScaler均值…

vue基础P7-17

1、模板语法 插值语法 {{xxxx}}用在标签体中&#xff0c;也就是<>{{xxx}}</> xxx是js表达式&#xff0c;有返回值&#xff0c;如num1、Date.now()。不是js代码 指令语法 以v开头&#xff0c;用于解析标签&#xff0c;包括标签属性、标签体内容、绑定事件 v-o…

web前端常识:深入理解与实战应用

web前端常识&#xff1a;深入理解与实战应用 Web前端作为现代互联网技术的核心组成部分&#xff0c;涉及的知识点既广泛又深入。对于初学者和进阶者而言&#xff0c;掌握Web前端常识是构建扎实基础、提升技能水平的关键。本文将从四个方面、五个方面、六个方面和七个方面对Web…

python 判断点和线段相交

python 判断点和线段相交 import numpy as np import cv2 import numpy as npdef point_to_line_distance(points, line_segments):# line_segments [[549, 303], [580, 303]]# points [565, 304]x0, y0, x1, y1line_segments[0][0], line_segments[0][1], line_segments[1]…

【python】OpenCV GUI——Trackbar(14.2)

学习来自 OpenCV基础&#xff08;12&#xff09;OpenCV GUI中的鼠标和滑动条 文章目录 GUI 滑条介绍cv2.createTrackbar 介绍牛刀小试 GUI 滑条介绍 GUI滑动条是一种直观且快速的调节控件&#xff0c;主要用于改变一个数值或相对值。以下是关于GUI滑动条的详细介绍&#xff1a…

win10文件夹.git或者文件被隐藏的开启姿势

按需排查&#xff0c;有的文件隐藏是好事 基本操作更多操作某些系统设置的隐藏操作在idea或者pycharm项目中显示.git文件夹 基本操作 文件夹-> 查看 -> 隐藏的项目点亮 更多操作 文件夹 -> 查看 -> 选项 -> 查看 -> 高级设置 -> 文件和文件夹 -> 隐…

服务器部署spring项目jar包使用bat文件,省略每次输入java -jar了

echo off set pathC:\Program Files\Java\jre1.8.0_191\bin START "YiXiangZhengHe-8516" "%path%/java" -Xdebug -jar -Dspring.profiles.activeprod -Dserver.port8516 YiXiangZhengHe-0.0.1-SNAPSHOT.jar 将set path后面改成jre的bin文件夹 START 后…

knoXSS(case01~10)

case 01: 先在每个框里都输入:<script>alert(1)</script> 检查源码 这里第三个和第四个点都被处理过了&#xff0c;所以先考虑第一个和第二个点 这里试了一下&#xff0c;发现GET也能传参&#xff0c;所以构造 成功 case 02: 这里发现变量a和这个似乎有关联&…

专业学习|南开大学《随机过程》学习笔记(一)

&#xff08;1&#xff09;有哪些经典的关于基本随机过程的书籍推荐&#xff1f; 对于想要系统学习基本随机过程的学生来说&#xff0c;可以参考Sheldon M.Rose编著的经典著作《随机过程》。该书涉及的内容也比较宽泛。但并不局限于单个细节论证。 此外&#xff0c;萨缪尔科林(…

嵌入式学习——Linux高级编程复习(标准IO)——day36

1. 标准IO概念——&#xff08;有缓存、流指针&#xff09; &#xff08;1&#xff09;标准IO是编程语言中处理输入和输出的一种通用方法&#xff0c;涉及以下三个预定义的文件指针&#xff1a; 1. stdin&#xff1a;标准输入&#xff0c;通常默认关联到键盘输入。 2. stdout&…

抓住时机的核心:坚持学习准备着

在这个快节奏的时代&#xff0c;时间对于每个人来说都是宝贵的。能否在合适的时间做正确的事情&#xff0c;往往决定了我们成功的概率。但同时&#xff0c;我们也要认识到&#xff0c;逆风翻盘虽少&#xff0c;却并非不可能。在这个过程中&#xff0c;投资自己&#xff0c;投资…

LabVIEW与Python的比较及联合开发

LabVIEW和Python在工业自动化和数据处理领域各具优势&#xff0c;联合开发可以充分发挥两者的优点。本文将从语言特性、开发效率、应用场景等多个角度进行比较&#xff0c;并详细介绍如何实现LabVIEW与Python的联合开发。 语言特性 LabVIEW 图形化编程&#xff1a;LabVIEW使用…