python中的继承

news2025/1/24 14:34:18

要理解继承首先要有父类子类的概念,可以理解成子类从父类中继承父类的属性和方法

创建父类

class Pet:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def jump(self):
        print(self.name+"在跳")

创建子类

class Cat(Pet):
    pass
mycat=Cat("白白",2)
print(mycat.jump())

在这里插入图片描述
如果您不想向该类添加任何其他属性或方法,就使用 pass 关键字。

现在,Cat 类拥有与 Pet 类相同的属性和方法。

为子类添加新的属性或方法

class Pet:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def jump(self):
        return(self.name+"在跳")
class Cat(Pet):
    def miao(self):
        return(self.name+"在叫")
    def jump(self):
        return(self.name+"在跳个不停")
mycat=Cat("白白",2)
print(mycat.jump())
print(mycat.miao())

在这里插入图片描述
当子类调用函数时,会先在自身寻找,如果没有就去父类寻找,所以当我们有定义了一遍jump后不会再调用父类里的jump,同时我们也可以定义自己专属的函数,

此时有个问题,如果我要在__init__里新增属性怎么办呢,比如猫我想让他有花纹,而狗我不想让他有花纹,self.pattern=Trueself.pattern=False该怎么办

如果我们像刚刚一样,去新写一个__init__,就只能把原来的name和age再写一遍,因为调用子类的__init__后父类的是不会调用的
此时就引出了super 方法

super方法

super会返回当前类的父类

class Pet:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def jump(self):
        return(self.name+"在跳")
class Cat(Pet):
    def __init__(self,name,age):
        super().__init__(name,age)
        self.pattern=True
class Dog(Pet):
    def __init__(self,name,age):
        super().__init__(name,age)
        self.pattern=False
mycat=Cat("miao",2)
mydog=Dog("woof",3)
print(mycat.pattern)
print(mydog.pattern)
print(mycat.age)
print(mydog.age)

在这里插入图片描述
这里有两点要注意

  1. 子类里的__init__里的参数要包含父类的参数,这样子后面才能super().__init__(name,age),否则会报错
  2. 这样子把要新添的参数放入函数的形参里也是没有问题的,还可以设定初始值
class Cat(Pet):
    def __init__(self, name, age, pattern=True):
        super().__init__(name, age)
        self.pattern = pattern

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

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

相关文章

HTML的有序列表、无序列表、自定义列表

目录 背景: 过程: 无序列表: 简介: 代码展示: 效果展示:​ 无序列表: 简介: 效果展示:​ 自定义列表: 简介: 效果展示: 总结: 背景: 1.有序列表(Ordered List): 有序列表是最早的列表类型之一&#xff…

编译器02-词法分析

一:简述 词法分析含义:为了翻译语言,编译器把程序各种成分拆开,那如何拆,首先第一步就是将输入分解成一个个独立的单词(token),这一过程叫词法分析。 二:单词(token)分为哪些种类 保留字…

类和对象:构造函数,析构函数与拷贝构造函数

1.类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器…

MAC M1芯片安装mounty读写移动硬盘中的文件

因为移动硬盘中的文件是微软公司NTFS格式,MAC只支持自己的APFS或者HFS,与微软的NTFS不兼容,所以需要第三方的软件来支持读写硬盘中的文件,经过一上午的折腾,最终选择安装mounty这个免费的第三方软件 工具网址连接&am…

C++11 类型转换

#include<iostream> #include<string> using namespace std;//类型转换 void Insert(size_t pos, char ch) {size_t _size 5;//....int end _size - 1;while (end > pos) // end隐式类型转换{//_str[end 1] _str[end];--end;} } void Test1() {int i 1;// …

C++:内存管理

目录 学习目标 1. C/C内存分布 2. C/C动态内存管理 2.1 C动态内存管理 2.2 C动态内存管理&#xff1a; 3. operator new与operator delete函数 4. new和delete的实现原理 5. 定位new表达式 学习目标 1. C/C内存分布 2. C/C动态内存管理&#xff08;malloc,free 与new ,…

【深度学习实战—6】:基于Pytorch的血细胞图像分类(通用型图像分类程序)

✨博客主页&#xff1a;米开朗琪罗~&#x1f388; ✨博主爱好&#xff1a;羽毛球&#x1f3f8; ✨年轻人要&#xff1a;Living for the moment&#xff08;活在当下&#xff09;&#xff01;&#x1f4aa; &#x1f3c6;推荐专栏&#xff1a;【图像处理】【千锤百炼Python】【深…

SQL Server2022版本 + SSMS安装教程(手把手安装教程)

SqlServer安装步骤如下&#xff1a; 下载请点点我 1.选择Developer版 2.点击浏览器下载标志&#xff0c;找到SqlServer在文件夹的位置。 3.进入下面的界面&#xff1a;选择自定义版本 4.将下载的C盘的盘符改为D盘 5.点击安装–进入下一步&#xff0c;显示如下界面。 过…

构建知识库的核心要义,试试我的工具和方法吧!

对于企业来说&#xff0c;如果所有人员的知识和经验&#xff0c;都集中沉淀到统一的文档系统中&#xff0c;那么&#xff0c;久而久之&#xff0c;会形成一个丰富的知识和经验库。 在构建知识库之前&#xff0c;我们要先确定知识库范围包含&#xff1a;素材整理、问题提炼、知识…

【Selenium】webdriver.ChromeOptions()官方文档参数

Google官方Chrome文档&#xff0c;在此记录一下 Chrome Flags for Tooling Many tools maintain a list of runtime flags for Chrome to configure the environment. This file is an attempt to document all chrome flags that are relevant to tools, automation, benchm…

7、Spring之依赖注入源码解析(下)

resolveDependency()实现 该方法表示,传入一个依赖描述(DependencyDescriptor),该方法会根据该依赖描述从BeanFactory中找出对应的唯一的一个Bean对象。 @Nullable Object resolveDependency(DependencyDescriptor descriptor, @Nullable String requestingBeanName,@Null…

拦截器学习

什么是拦截器 Spring MVC 中的拦截器( Interceptor )类似于ServLet中的过滤器( Filter )&#xff0c;它主要用于拦截用户请求并作出相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。 工作原理 一个拦截器&#xff0c;只有 preHandle …

mac电脑安装paste教程以及重新安装软件后不能使用解决方法

问题背景 mac电脑安装paste教程以及重新安装软件后不能使用解决方法。 mac电脑安装paste失败&#xff0c;安装好后还是无法使用&#xff0c;paste显示还是历史粘贴信息&#xff0c;导致无法使用。新 copy的内容也无法进入历史粘贴版里面。 笔者电脑配置信息&#xff1a;MacB…

7.13 在SpringBoot中 正确使用Validation实现参数效验

文章目录 前言引入Maven依赖一、POST/PUT RequestBody参数校验1.1 Valid或Validated注解配合constraints注解1.2 测试运行 二、GET/DELETE RequestParam参数校验2.1 Validated注解配合constraints注解2.2 测试运行 三、GET 无注解参数校验3.1 Valid或Validated注解配合constrai…

【OpenCV • c++】直方图计算 | 绘制 H-S 直方图 | 绘制一维直方图 | 绘制 RGB 三色直方图

文章目录 一、什么是直方图二、直方图的相关函数1、计算直方图 calcHist()2、找寻最值 minMaxLoc() 三、程序演示1、色调 —— 饱和度直方图2、一维直方图3、RGB 三色直方图 一、什么是直方图 直方图广泛应用于很多计算机视觉处理当中。通过标记帧与帧之间显著的边缘和颜色的变…

【数据结构】 二叉搜索树的实现

文章目录 &#x1f340;二叉搜索树的概念&#x1f6ec;二叉搜索树功能实现&#x1f6a9;查找关键字key&#x1f4cc;代码实现&#xff1a; &#x1f6a9;插入关键字key&#x1f4cc;代码实现&#xff1a; &#x1f6a9;删除关键字key&#x1f4cc;代码实现&#xff1a; &#x…

OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合

目录 1.轮廓外接最大矩形boundingRect() 2.轮廓外接最小矩形minAreaRect() 3.轮廓外接多边形approxPolyDP() 1.轮廓外接最大矩形boundingRect() Rect cv::boundingRect ( InputArray array ) array:输入的灰度图像或者2D点集&#xff0c;数据类型为vector<Point>或者M…

OpenCV实现图像的混合

原理 这其实也是加法&#xff0c;但是不同的是两幅图像的权重不同&#xff0c;这就会给人一种混合或者透明的感觉。 图像混合的计算公式如下: g(x)(1-a)f0(x) af1(x) 通过修改α的值(0→1) &#xff0c;可以实现非常炫酷的混合。 现在我们把两幅图混合在一起。 第一幅图…

C 风格文件输入/输出---无格式输入/输出---(std::fputc,std::putc,std::fputs)

C 标准库的 C I/O 子集实现 C 风格流输入/输出操作。 <cstdio> 头文件提供通用文件支持并提供有窄和多字节字符输入/输出能力的函数&#xff0c;而 <cwchar>头文件提供有宽字符输入/输出能力的函数。 无格式输入/输出 写字符到文件流 std::fputc, std::putc in…

软件测试面试遇到之redis要怎么测试?

软件测试面试遇到&#xff1a;redis要怎么测试&#xff1f; 首先我们需要知道&#xff0c;redis是什么&#xff1f;它能做什么&#xff1f; redis是一个 key-value 类型的高速存储数据库。redis常被用做&#xff1a;缓存、队列、发布订阅等。 所以&#xff0c;“redis要怎么…