python 面对对象 类 继承

继承

继承就是为了解决两个有大量重复性代码的类,抽象出一个更抽象的类放公共代码,主要是代码复用,方便代码的管理与修改

类的继承包括属性和方法,私有属性也可继承

class Person():               # 默认是继承object超类passclass Man(Person):passprint(Person.__bases__)       # __bases__查询父类
print(Man.__bases__)          # 继承Person
class Person():eat = '吃饭'def __init__(self):self.people = '人'def shuijiao(self):print('睡觉')class Man(Person):passprint(dir(Person))
print(dir(Man))         # 属性方法全部继承a = Man()
print(dir(a))
class Person():def __init__(self, name):self.name= nameclass Man(Person):passs = Man('张三')         # 父类初始化要传值,子类也需要
print(s.name)            # 张三

解决私有属性的调用

class Person():def __init__(self, age):self.__age = agedef run(self):print(self.__age)    # 这里可以调用私有属性class Man(Person):pass# def to(self):#     print(self.__age)        # 无法在子类调用私有属性s = Man(18)
# s.to()              # 无法直接调用父类的私有属性
print(dir(s))       # 但是私有属性也会被继承s.run()            # 通过写一个方法来调用私有属性

 

 

继承顺序

按照继承顺序来,首先是实例本身,然后是实例的类,然后是父类,以此类推,最后是object超类

class Person():def __init__(self, age):self.age = ageclass Man(Person):passs = Man(18)print(s.__class__.__mro__)     # (<class '__main__.Man'>, <class '__main__.Person'>, <class 'object'>)
print(Man.__mro__)             # 跟以上一样

 

多继承

class Person():texp = '直立行走'def __init__(self, age):self.name = '人'self.age = ageself.__sex = '性别'def run(self):print('人会跑')class Man(Person):a = '父'class Woman(Person):a = '母'class Son(Woman, Man):        # 谁在前,就先继承谁,依据这里passprint(Son.__mro__)# (<class '__main__.Son'>, <class '__main__.Man'>, <class '__main__.Woman'>, <class '__main__.Person'>, <class 'object'>)

继承的属性或方法与父类同名会怎么样

先继承谁的,就依据谁的,按照上面的这个代码的话,那就是继承Woman的,如果是需要调用到 “a” 那么就是输出 “母”

 

 

 

重构(重写)

class Person():def __init__(self, age):self.age = ageclass Man(Person):a = '父'class Woman(Person):a = '母'class Son(Woman, Man):def __init__(self, name):          # 父类子类同时初始化,也是按照继承顺序来self.name = names = Son('张三')
print(s.name)                          # 初始化按照继承顺序来

 

 

定向继承

super,指定继承,需要有继承关联

super(): 是用于调用父类的一个方法,遵循就近原则

是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(mro)、重复调用

class Person():def __init__(self, age):self.age = agedef eat(self):print('吃饭')class Man(Person):a = '父'class Woman(Person):a = '母'class Son(Woman, Man):def run(self):super().eat()print(super().a)print(super(Woman, self).a)s = Son(18)
s.run()# 吃饭
# 母
# 父

 

 

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

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

相关文章

【数据结构(邓俊辉)学习笔记】二叉树03——重构

0 .概述 介绍下二叉树重构 1. 遍历序列 任何一棵二叉树我们都可以导出先序、中序、后序遍历序列。这三个序列的长度相同&#xff0c;他们都是由树中的所有节点依照相应的遍历策略所确定的次序&#xff0c;依次排列而成。 若已知某棵树的遍历序列是否可以忠实地还原出这棵树…

ic基础|时钟篇05:芯片中buffer到底是干嘛的?一文带你了解buffer的作用

大家好&#xff0c;我是数字小熊饼干&#xff0c;一个练习时长两年半的ic打工人。我在两年前通过自学跨行社招加入了IC行业。现在我打算将这两年的工作经验和当初面试时最常问的一些问题进行总结&#xff0c;并通过汇总成文章的形式进行输出&#xff0c;相信无论你是在职的还是…

图片AI高效生成惊艳之作,一键解锁无限创意,轻松打造概念艺术新纪元!

在数字化时代&#xff0c;图片已经成为我们表达创意、传递信息的重要载体。然而&#xff0c;传统的图片生成方式往往耗时耗力&#xff0c;无法满足我们对于高效、创意的需求。幸运的是&#xff0c;现在有了图片AI&#xff0c;它以其高效、智能的特点&#xff0c;为我们带来了全…

微服务-系统架构

微服务&#xff1a; 系统架构的演变 单一应用架构 早期的互联网应用架构&#xff0c;大量应用服务 功能 集中在一个包里&#xff0c;把大量的应用打包为一个jar包&#xff0c;部署在一台服务器&#xff0c;例如tomcat上部署Javaweb项目 缺点:耦合度高&#xff0c;一台服务器…

一千题,No.0014(素数对猜想)

让我们定义dn​为&#xff1a;dn​pn1​−pn​&#xff0c;其中pi​是第i个素数。显然有d1​1&#xff0c;且对于n>1有dn​是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。 现给定任意正整数N(<105)&#xff0c;请计算不超过N的满足猜想的素数对的个数。…

分布式缓存:探讨如何在Java中使用分布式缓存解决方案,比如Redis或Hazelcast等

分布式缓存简介 分布式缓存是一种数据管理策略,它可以帮助我们更有效地使用网络中多台服务器的存储资源,从而提高数据获取的速度。我们可以把数据(如数据库查询结果、计算结果等)存储在这种缓存中,从而提供更快的数据访问速度,减少对原始数据源的访问并降低网络负载。 …

Point-Nerf 理论笔记和理解

文章目录 什么是point nerf 和Nerf 有什么区别Point Nerf 核心结构有哪些&#xff1f;什么是point-based radiance field? 点云位置以及置信度是怎么来Point pruning 和 Point Growing 什么是point nerf 和Nerf 有什么区别 基本的nerf 是通过过拟合MLP来完成任意视角场景的重…

缓存穿透、击穿、雪崩的解决方法

一、缓存穿透指的是查询一个不存在的数据&#xff0c;由于缓存中没有对应的值&#xff0c;每次请求都要查询数据库&#xff0c;容易导致数据库压力过大。 解决方法&#xff1a; 使用布隆过滤器等手段可以在请求到达后台处理之前就过滤掉这些不存在的请求&#xff0c;避免了对数…

gazebo中通过编写插件发布随动关节的角度值到话题

1. cpp 编写 #include <gazebo/gazebo.hh> #include <gazebo/physics/physics.hh> #include <gazebo/common/common.hh> #include <ros/ros.h> #include <std_msgs/Float64.h>namespace gazebo {class PoleJointAnglePublisher : public ModelP…

KAFKA消费者-进阶用法

Apache Kafka 是一个分布式流处理平台&#xff0c;用于构建实时流数据管道和应用程序。在 Kafka 中&#xff0c;消费者&#xff08;Consumer&#xff09;用于从 Kafka 主题&#xff08;Topic&#xff09;中读取消息并进行处理。本文将介绍 Kafka 消费者的进阶用法&#xff0c;包…

Linux(六)

Linux&#xff08;六&#xff09; 自定义头文件自定义头文件中写什么如何引入头文件条件编译条件编译作用 gcc工作原理Make 工作管理器什么是Make什么是Makefile/makefileMakefile假目标Makefile中的变量自定义变量预定义变量自动变量 Makefile中变量展开方式递归展开方式简单展…

正运动机器视觉运动控制一体机应用例程

机器视觉运动控制一体机应用例程-多目标形状匹配-正运动技术 (zmotion.com.cn) 机器视觉运动控制一体机应用例程&#xff08;二&#xff09; 颜色识别-正运动技术 (zmotion.com.cn) 机器视觉运动控制一体机应用例程&#xff08;三&#xff09; 基于BLOB分析的多圆定位-正运动…

2024攻防演练利器之必修高危漏洞合集

随着网络安全的发展和攻防演练工作的推进&#xff0c;红蓝双方的技术水平皆在实践中得到了很大的提升&#xff0c;但是数字化快速发展也导致了企业的影子资产增多&#xff0c;企业很多老旧系统依旧存在历史漏洞&#xff0c;与此同时&#xff0c;在攻防演练期间&#xff0c;往往…

TalkingData 数据统计详解

一、引言 在现代数据驱动的商业环境中&#xff0c;准确、及时的数据统计与分析对于企业的决策具有至关重要的作用。TalkingData 是中国领先的独立第三方数据智能服务平台&#xff0c;专注于提供专业的数据统计和分析解决方案。本文将详细介绍 TalkingData 的基本概念、主要功能…

利用EAS自动生成数据模型和sql脚本

EAS适用于敏捷开发中小系统,这节主要讲解EAS对应的模型和数据库脚本输出应用。 在这个应用程序中,用户可自定义实体模型和枚举模型,只要选择相应的实体或者枚举进行右击添加即可。 解决方案参数设定,在解决方案的设定中可设置项目名称、通用语言,命名空间和输出位置。 连…

C语言系列文章 | 函数 (共 10209 字)

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 目录 函数的概念库函数自…

设计软件有哪些?建模和造型工具篇(1),渲染100邀请码1a12

之前我们介绍的都是渲染软件&#xff0c;但对于设计师来说建模和造型是在渲染之前&#xff0c;所以从现在开始&#xff0c;我们会介绍一批建模和造型工具。 1、ZBrush ZBrush是由Pixologic公司开发的数字雕刻和绘画软件&#xff0c;专为艺术家和设计师而设计。它结合了3D建模…

抖店如何打造出爆品?学好这几招,轻松打爆新品流量

大家好&#xff0c;我是电商花花。 近年来&#xff0c;抖店商家越来越多&#xff0c;而选品&#xff0c;爆品就是我们商家竞争的核心了&#xff0c;谁能选出好的新品&#xff0c;打造出爆品&#xff0c;谁的会赚的多&#xff0c;销量多。 做抖音小店想出单&#xff0c;想赚钱…

转置卷积简明教程

转置卷积层也被&#xff08;错误地&#xff09;称为反卷积层。反卷积层反转了标准卷积层的操作&#xff0c;即如果对通过标准卷积层生成的输出进行反卷积&#xff0c;则会返回原始输入。转置卷积层与反卷积层相似&#xff0c;因为两者生成的空间维度相同。转置卷积不是通过值反…

Java+Spring Boot +MySQL + MyBatis Plus一款数字化管理平台源码:云MES系统

JavaSpring Boot MySQL MyBatis Plus一款数字化管理平台源码&#xff1a;云MES系统 MES是为企业提供制造全过程的信息化产品&#xff0c;支持企业智能制造。MES可实现与企业的ERP、PDM等其他信息化系统进行无缝连接&#xff0c;也可与现场生产设备进行连接、数据采集&#xff…