python中的继承

news/2025/2/12 7:47:28/

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

创建父类

class Pet:def __init__(self,name,age):self.name = nameself.age = agedef 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 = nameself.age = agedef 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 = nameself.age = agedef 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.ppmy.cn/news/1102002.html

相关文章

UG\NX CAM二次开发 设置工序检查体 UF_CAMGEOM_append_items

文章作者:代工 来源网站:NX CAM二次开发专栏 简介: UG\NX CAM二次开发 设置工序检查体 UF_CAMGEOM_append_items 效果: 代码: static int init_proc(UF_UI_selection_p_t select, void* user_data) { int errorCode = 0; int num_triples = 1;//UF_UI_mask_t…

python-kafka客户端封装

目录 前言封装代码测试代码参考 前言 本文对python的kafka包做简单封装,方便kafka初学者使用。包安装: pip install kafka-python封装代码 kafka_helper.py #!/usr/bin/env python # -*- coding: utf-8 -*- import json import traceback from kafka…

手写Spring:第4章-基于Cglib实现含构造函数的类实例化策略

文章目录 一、目标:含构造函数的类实例化二、设计:含构造函数的类实例化三、实现:含构造函数的类实例化3.1 工程结构3.2 含构造函数的类实例化类图3.3 类实例化策略3.3.1 定义实例化策略接口3.3.2 JDK实例化3.3.3 Cglib实例化 3.4 抽象类定义…

微信小程序——生命周期

在微信小程序中,可以通过生命周期函数来执行相应的代码操作。以下是一些常见的生命周期代码操作示例: 在 onLoad 生命周期中进行数据初始化和网络请求: onLoad: function(options) {// 数据初始化this.setData({name: John,age: 25});// 网…

ArcGIS API for JavaScript 4.x 实现动态脉冲效果

1. 设计思路 主要通过定时刷新,每一次的脉冲渲染圈不停的放大,并且透明度缩小,直到达到一定的大小再退回0。 2. 实现代码 import MapView from "arcgis/core/views/MapView"; import GraphicsLayer from "arcgis/core/laye…

浅述C++模板——函数模板及类模板

前言 模板作为 C 的一大特色,对于泛型编程有着重要的作用。同时,对于大规模类似的函数或是类型不确定的类,模板都起了至关重要的作用。 一、模板 在开始学习模板之前,我们首先需要了解模板。先看下面一个例子: #in…

跨站请求伪造

CSRF是什么? 跨站请求伪造(Cross Site Request Forgery,CSRF)是一种攻击,它强制浏览器客户端用户在当前对其进行身份验证后的Web 应用程序上执行非本意操作的攻击,攻击的重点在于更改状态的请求,而不是盗取数据&#x…

Datastage部署与使用

Datastage部署与使用 - 码农教程 https://www.cnblogs.com/lanston/category/739553.html Streamsets定时拉取接口数据同步到HBase集群_streamsets api_webmote的博客-CSDN博客 【SDC】StreamSets实战之路-28-实战篇- 使用StreamSets实时采集指定数据目录文件并写入库Kudu_菜…