Python---关联与继承

news2024/10/1 23:39:02

专栏:python
个人主页:HaiFan.
专栏简介:Python在学,希望能够得到各位的支持!!!

关联与继承

  • 前言
  • has a关联关系
  • is a继承关系
    • 子类不添加__init__
    • 子类添加__init__

前言

在这里插入图片描述

has a关联关系

has - a 是在一个类中使用了另一种自定义的类型。

看代码

import random

class Road:
    def __init__(self,name,len):
        self.name = name
        self.len = len

class Car:
    def __init__(self,brand,speed):
        self.brand = brand
        self.speed = speed

    def get_time(self,road):
        ran_time = random.randint(1,10)
        msg = f'{self.brand}品牌的车在{road.name}上以{self.speed}速度行驶了{ran_time}个小时'
        print(msg)

    def __str__(self):
        return f'{self.brand}品牌的\n速度{self.speed}'

r = Road('nb',111)

c = Car('shangtian',130)

print(c)

c.get_time(r)

这个代码中的 get_time中的road和r是一样的,指向同一块空间,如果在传参的时候,不传r对象,那么,get_time里面是没有name这个属性的,r可以.调用属性,road.也可以调用属性
在这里插入图片描述


在这里插入图片描述
我把这个r对象中的name进行更改,因为r和road指向的是同一块空间,所以,r.name改变之后,road.name也会改变


  1. has a
    一个类中使用了另一种自定义类型就是关联关系
    如上面代码中c对象中的参数是r对象

is a继承关系

is - a简单来说就是继承关系,类的父子继承关系。

子类不添加__init__

在以后的开发过程中,我们会碰到很多情况,比如,让我们写多个类:医生类,学生类等等,在每一个类里面,都会写名字,性别,年龄等,一个一个的类写是比较繁琐的,在这里,Python给出了解决办法

class Student:
    def __init__(self,name,age):
        self.name = name
        self.age = age
        
    def eat(self):
        print(f'{self.name}正在吃饭')


class Doctoe:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def eat(self):
        print(f'{self.name}正在吃饭')

这个代码中,有着很多重复的代码,并且这些类都有一个共同的特征,那么就可以提取出来他们共同的部分,写做一个类,将其共同的特征都写入这个类中。这个类就是父类

class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def eat(self):
        print(f'{self.name}正在吃饭')


class Student:
    pass


class Doctoe:
    pass

a = Student()

a.eat()

在创建出a对象之后,这个对象是找不到eat这个方法的。
因为Student类中为pass
那么,如何让提取出来的共同特征在下面的类中都能体现出来呢?

这就用到了继承关系,把人这一类称为父类,把属于人这一类的类,称为子类。

class 父名字:
    pass
class 类名(父类名字):
    pass

在这里插入图片描述
为什么在继承之后,还会出现阴影?子类继承父类后,会受到父类的影响,因为父类的__init__有name和age参数,所以子类中也有这两个参数,所以会出现阴影

class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def eat(self):
        print(f'{self.name}正在吃饭')


class Student(Person):
    pass


class Doctoe(Person):
    pass

a = Student('lise',19)
a.eat()

在这里插入图片描述


我们创建一个类,默认继承是object,在Python3中,我们不写(object),默认继承object

我们知道,Python代码是依次执行的,所以再上面的代码中,会先通过__new__魔术方法开辟一段空间,然后把空间传给__init__.


这个__new__是object的,如果自己没有就会先去父类找,父类没有,就会去object找,再比如__init__,Student类里面是没有这个魔术方法的,那么就会先去父类找。

本层找不到,就去上层找

子类添加__init__

lass Person:
    def __init__(self):
        self.name = 'lisi'
        self.age = 19

    def eat(self):
        print(f'{self.name}正在吃饭')

    def run(self):
        print(f'{self.namme}正在跑步')

class Student(Person):
    def __init__(self):
        print('-------init')

class Employee(Person):
    pass

class Doctor(Person):
    pass


a = Student()

在这里插入图片描述
创建a对象,然后运行代码,会打印出执行__init__的结果。

如果再加一个a.eat()呢?
在这里插入图片描述
这就错了。
在这里插入图片描述


那么,如何调用父类的 __init__呢?

这里我们用到了 super关键字

在这里插入图片描述

如何调用父类 __init__

  1. super(). __init__(参数)
  2. super(类名,对象).__init__(参数)
class Person:
    def __init__(self):
        self.name = 'lisi'
        self.age = 19

    def eat(self):
        print(f'{self.name}正在吃饭')

    def run(self):
        print(f'{self.namme}正在跑步')

class Student(Person):
    def __init__(self):
        print('-------init')
        super().__init__()
class Employee(Person):
    pass

class Doctor(Person):
    pass


a = Student()

在这里插入图片描述


在这里插入图片描述


  1. 如果类中不定义 __init__,就调用父类的 __init__

  2. 如果类继承父类也需要定义自己的 __init__,就需要在当前类的 __init__调用一下父类 __init__

  3. 如何调用父类 __init__

    1. super(). __init__(参数)
    2. super(类名,对象).__init__(参数)
  4. 如果父类有eat(),子类也定义一个eat方法,默认搜索原则:先找当前类,再去找父类。

    父类提供的方法不能满足子类的需求,就需要在子类中定义一个同名的方法,这种行为叫做:重写 override\

  5. 子类的方法中也可以调用的父类的方法,

    super().eat()

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

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

相关文章

【华为OD机试模拟题】用 C++ 实现 - 符合条件的子串长度(2023.Q1)

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

28张图讲解支付系统的通用设计,漂亮!

支付永远是一个公司的核心领域,因为这是一个有交易属性公司的命脉。那么,支付系统到底长什么样,又是怎么运行交互的呢?抛开带有支付牌照的金融公司的支付架构,下述链路和系统组成基本上符合绝大多数支付场景。其实整体…

HCIA-HarmonyOS Application Developer——题目集1

题目1 1、一位开发人员在设计应用程序时,添加了一个Text组件和Button组件,开发样图如下所示。该开发者不能选择哪种布局方式来放置组件? A、StackLayout B、DependentLayout C、DirectionalLayout D、TableLayout 解析:(A&#…

物理机与启动的Docker容器间的目录映射

第一步,进入宿主机的配置文件目录。 # 查看容器存放目录 命令:docker info | grep Root # 得到容器id 命令:cd /var/lib/docker/containers # 进入配置文件目录 命令:cd /var/lib/docker/containers/容器id 第二步&#xf…

【vue2小知识】实现axios的二次封装

🥳博 主:初映CY的前说(前端领域) 🌞个人信条:想要变成得到,中间还有做到! 🤘本文核心:在vue2中实现axios的二次封装 目录 一、平常axios的请求发送方式 二、axios的一次封装…

Python自动获取海量ip,再也不用愁被封啦~

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 本次网站: 本文所有模块\环境\源码\教程皆可点击文章下方名片获取此处跳转 开发环境: python 3.8 运行代码 pycharm 2022.3 辅助敲代码 模块使用: import parsel >>> pip install parsel…

【华为OD机试模拟题】用 C++ 实现 - 单词接龙(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 货币单位换算(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 选座位(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 停车场最大距离(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 重组字符串(2023.Q1) 【华为OD机试模…

【自动化测试入门】Selenium基础(建议收藏)

selenium简介 1、什么是Selenium Selenium 是支持 Web 浏览器自动化的一系列工具和库的综合项目。 它提供了扩展来模拟用户与浏览器的交互,用于扩展浏览器分配的分发服务器, 以及用于实现 W3C WebDriver 规范的基础结构, 该 规范 允许您为…

springboot+vue.js协同过滤算法之智能旅游推荐系统java

目 录 第一章 绪论 3 1.1课题背景 3 1.2课题研究的目的和意义 3 1.3 研究现状 4 1.4论文所做的主要工作 4 第二章 技术介绍 5 2.1B/S结构 5 2.2MySQL 介绍 5 2.3MySQL环境配置 6 第三章 系统分析与设计 8 3.1系统说明 8 3.2系统可行性分析…

力扣18.四数之和

文章目录力扣18.四数之和题目描述C语言深搜回溯,在超时的边缘....力扣18.四数之和 题目描述 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &…

【Linux】进程间通信介绍 | 管道

​🌠 作者:阿亮joy. 🎆专栏:《学会Linux》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉进程间通信…

【华为OD机试模拟题】用 C++ 实现 - 数字的排列(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 分积木(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 吃火锅(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - RSA 加密算法(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 构成的正方形数量(2023.Q1) 【华为OD机试模拟…

【华为OD机试模拟题】用 C++ 实现 - 非严格递增连续数字序列(2023.Q1)

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

独家 | 6个Python数据科学库正在狂飙,你一定要学来提升文化素养

作者:Bex T翻译:wwl 校对:张睿毅本文约3200字,建议阅读8分钟 计算类数据科学库,已经不再局限在Pandas、NumPy、Scikit-learn之内了!动机2023年的开始,自然需要探索数据科学和机器学习的新趋势。…

ABBYYFineReader15免费电脑pdf文档文字识别软件

ABBYYFineReader是一款OCR文字识别软件,它可以对图片、文档等进行扫描识别,并将其转换为可编辑的格式,比如Word、Excel等,操作也是挺方便的。 我们在官网找到该软件并进行下载,打开软件后,选择转换为“Mic…

CSS 定位网页元素【快速掌握知识点】

目录 前言 一、position: static 二、position: relative 三、position: absolute 四、position: fixed 五、position: sticky 前言 当我们在设计网页时,经常需要对网页中的元素进行定位,以便它们出现在我们想要的位置。在 CSS 中,我们…

【华为OD机试模拟题】用 C++ 实现 - 报数(2023.Q1)

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

python+django协同过滤算法的电影推荐系统

(1)管理员功能需求 管理员登陆后,主要模块包括首页,个人中心,用户管理,电影分类管理,免费电影管理,付费电影管理,电影订单管理,我的电影管理,电影…

git status输出的文件路径的中文乱码问题

在项目下输入git status之后,出现如下情况:在线搜索了一下,发现是git添加了如下特性:git参考文档:https://git-scm.com/docs/git-config根据上面的文档得知,git对超过0x80的字符都会以八进制输出&#xff0…

CMake调试器出炉:调试你的CMake脚本

Visual Studio 开发团队一直和 Kitware 紧密合作,致力于开发一个用于调试 CMake 脚本的调试器。 我们将继续这个工作,以便开发人员社区可以通过添加新功能和对其他 DAP 功能的支持来共同改进它。 我们很高兴地宣布,CMake 调试器的预览版现在…