面向对象编程进阶笔记

一、代码重用与继承

在面向对象编程中,代码重用是一个核心概念,通过继承机制可以实现这一点。继承允许子类自动获得父类的所有方法和属性,无需重复编写相同的代码。子类在继承父类的基础上,可以添加自己特有的属性和方法,或者重写父类中的方法以满足更具体的需求。

单继承是面向对象编程中最基本的继承形式,其语法如下:

class 子类名(父类名):  
    pass

专业术语中,子类也被称为派生类,父类则称为基类超类

继承的传递性意味着子类不仅拥有父类的属性和方法,还间接拥有父类的父类中的所有属性和方法。

二、方法的重写

当父类的方法不满足子类的特定需求时,子类可以对这些方法进行重写。重写有两种主要形式:

  1. 完全覆盖父类方法:在子类中定义一个与父类同名的方法,并给出新的实现。
  2. 扩展父类方法:在子类中重写方法时,通过super().父类方法()调用父类方法的执行,并在适当的位置添加子类特有的代码。

调用父类方法的另一种方式是使用父类名.方法(self),但需要注意避免在子类中直接使用子类名调用方法,这会导致递归调用和死循环。

三、私有属性与方法

私有属性私有方法是类的内部实现细节,不对外公开,外界及子类不能直接访问。私有成员通常以双下划线(__)开头。子类对象不能在自己的方法内部直接访问父类的私有属性或私有方法,但可以通过父类的公有方法间接访问。

四、多继承

Python支持多继承,允许一个子类继承自多个父类。语法如下:

class 子类名(父类名1, 父类名2, ...):  
    pass

在多继承中,如果不同的父类中存在同名的方法,子类对象在调用时会遵循方法搜索顺序(MRO)。Python使用__mro__属性来显示这个顺序,它决定了在查找方法时应该按什么顺序访问各个类。

新式类(以object为基类的类)遵循广度优先的搜索顺序,而经典类(不以object为基类的类)遵循深度优先的搜索顺序。建议统一使用新式类,因为它们提供了更丰富的特性和更好的性能。

五、多态

多态是面向对象编程中的另一个重要概念,它允许父类的同一种动作或行为在不同的子类上有不同的实现。多态增强了程序的扩展性和灵活性,体现了开闭原则(对扩展开放,对修改关闭)。

在Python中,多态的实现非常灵活,因为Python是一种动态类型语言,允许在运行时动态绑定对象的方法。

六、封装

封装是面向对象编程的基石之一。广义的封装指的是将属性和方法封装到一个类中,使得类的内部实现细节对外隐藏,只通过公共的接口与外部交互。狭义的封装则特指私有化,即将类的某些成员(如属性、方法等)设置为私有,仅允许在类的内部访问。

封装有助于保护数据的安全性,同时降低了类之间的耦合度,提高了代码的可维护性和复用性。

七、总结

面向对象编程通过继承、多态和封装等机制,提供了强大的代码重用和扩展能力。掌握这些概念对于编写高效、可维护的代码至关重要。在实际开发中,应当灵活运用这些机制,设计出结构清晰、易于扩展的软件系统。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

强化学习的数学原理:值迭代与策略迭代

概述 从课程地图上可以看出来,这是本门课程中第一次正式的介绍强化学习的算法,并且是一个 model-based 的算法,而在下一节课将会介绍第一个 model-free 的算法(在 chapter 5)。而这两节和之前所学的 BOE 是密切相关的&…

笔记-python爬虫概述

目录 常用第三方库 爬虫框架 动态页面渲染1. url请求分析2. selenium3. phantomjs4. splash5. spynner 爬虫防屏蔽策略1. 修改User-Agent2. 禁止cookies3. 设置请求时间间隔4. 代理IP池5. 使用Selenium6. 破解验证码常用第三方库 对于爬虫初学者,建议在了解爬虫原…

DEX: Scalable Range Indexing on Disaggregated Memory——论文泛读

arXiv Paper 论文阅读笔记整理 问题 内存优化索引[2,3,18,27,42]对于加速OLTP至关重要,但随着数据大小(以及索引大小)的增长,对内存容量的需求可能会超过单个服务器所能提供的容量…

基于ADRC自抗扰算法的UAV飞行姿态控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 控制系统概述 4.2 ADRC基本框架 4.3 控制律设计 5.完整工程文件 1.课题概述 基于ADRC自抗扰算法的UAV飞行姿态控制系统simulink建模与仿真,分别对YAW,PITCH,ROL…

golang写的自动更新器

文件自动更新器,这个很多端游和软件都有用到的。 golang的rpc通信,是非常好用的一个东西,可以跟调用本地函数一样,调用远程服务端的函数,直接从远程服务端上拉取数据下来,简单便捷。 唯一的遗憾就是&#x…

互联网盲盒小程序的市场发展前景如何?

近几年来,盲盒成为了大众热衷的消费市场。盲盒是一个具有随机性和惊喜感,它能够激发消费者的好奇心,在拆盲盒的过程中给消费者带来巨大的愉悦感,在各种的吸引力下,消费者也愿意为各类盲盒买单。如今,随着盲…

暑假提升(2)[平衡二叉树之一--AVL树]

我不去想未来是平坦还是泥泞,只要热爱生命一切,都在意料之中。——汪国真 AVLTree 1、诞生原因2、什么是AVL树3、如何设计AVL树3、1、AVL树节点的定义3、2、AVL树的插入3、3、平衡因子那些事3、3、1、平衡因子-2/2下的简单情况3、3、2、平衡因子-2/2下的…

tkinter拖入txt文本并显示

tkinter拖入txt文本并显示 效果代码 效果 代码 import tkinter as tk from tkinter import scrolledtext from tkinterdnd2 import DND_FILES, TkinterDnDdef drop(event):file_path event.data.strip({})if file_path.endswith(.txt):with open(file_path, r, encodingutf-8…

K8s 的最后一片拼图:dbPaaS

K8s 的发展使得私有云跟公共云之间的技术差不断的缩小,不管是在私有云还是公共云,大家今天都在基于 K8s 去开发 PaaS 系统。而 K8s 作为构建 PaaS 的基础,其全景图里还缺最后一块“拼图”——dbPaaS。作为一个云数据库行业干了十几年的资深从…

urfread刷算法|构建一棵树

大意 示例标签串: 处理结果: 题目1 根据标签串创建树 需求 需求:给出一个字符串,将这个字符串转换为一棵树。 字符串可以在代码里见到,是以#开头,按照\分割的字符串。 你需要将这个字符串&#xff0…

【鸿蒙学习笔记】@Prop装饰器:父子单向同步

官方文档:Prop装饰器:父子单向同步 [Q&A] Prop装饰器作用 Prop装饰的变量可以和父组件建立单向的同步关系。Prop装饰的变量是可变的,但是变化不会同步回其父组件。 [Q&A] Prop装饰器特点 1・Prop装饰器不能在Entry装饰的…

Android Studio上传新项目到Gitee

一、在Gitee上创建仓库 首先需要再Gitee上创建仓库 1、在Gitee中新建仓库 2、输入仓库信息 3、生成仓库地址 创建成功会生成一个仓库地址,格式如下: https://gitee.com/test/compose_mvi_demo.git二、Android Studio 上传项目到Gitee 1、在Android …

CXL-GPU: 全球首款实现百ns以内的低延迟CXL解决方案

数据中心在追求更高性能和更低总拥有成本(TCO)的过程中面临三大主要内存挑战。首先,当前服务器内存层次结构存在局限性。直接连接的DRAM与固态硬盘(SSD)存储之间存在三个数量级的延迟差异。当处理器直接连接的内存容量…

Hive测试

1、数据仓库的体系结构包含四个层次,分别是: 数据源 数据存储和管理 数据服务 数据应用 2、Hive提供了类似关系数据库SQL的查询语言: HiveQL 3、Hive某种程度上可以看作 用户编程接口,本身不存储和处理数据,存储数据依…

CesiumJS【Basic】- #057 绘制纹理填充多边形(Primitive方式)

文章目录 绘制纹理填充多边形(Primitive方式)1 目标2 代码2.1 main.ts绘制纹理填充多边形(Primitive方式) 1 目标 使用Primitive方式绘制绘制纹理填充多边形 2 代码 2.1 main.ts import * as Cesium from &

CDC模型

引言 聚类是一种强大的机器学习方法,用于根据特征空间中元素的接近程度发现相似的模式。它广泛用于计算机科学、生物科学、地球科学和经济学。尽管已经开发了最先进的基于分区和基于连接的聚类方法,但数据中的弱连接性和异构密度阻碍了其有效性。在这项…

职业性格测试,企业HR招聘测评最常用人才测评

关于求职测评,招聘中用到的人才测评,你们对这个话题又知道多少呢?为什么我会以90后为分界线,首先90后正是接触计算机最早的一代,因为小编是90后,更了解这个年龄段都在做什么,可以说90后见证了互…

【echarts】拖拽滑块dataZoom-slider自定义样式,简单适配移动端

电脑端 移动端 代码片段 dataZoom: [{type: inside,start: 0,end: 100},{type: slider,backgroundColor: #F2F5F9,fillerColor: #BFCCE3,height: 13, // 设置slider的高度为15start: 0,end: 100,right: 60,left: 60,bottom: 15,handleIcon:path://M30.9,53.2C16.8,53.2,5.3,41.…

第一周题目总结

1.车尔尼有一个数组 nums ,它只包含 正 整数,所有正整数的数位长度都 相同 。 两个整数的 数位不同 指的是两个整数 相同 位置上不同数字的数目。 请车尔尼返回 nums 中 所有 整数对里,数位不同之和。 示例 1: 输入&#xff1a…

Android Studio环境搭建(4.03)和报错解决记录

1.本地SDK包导入 安装好IDE以及下好SDK包后,先不要管IDE的引导配置,直接新建一个新工程,进到开发界面。 SDK路径配置:File---->>Other Settings---->>Default Project Structure 拷贝你SDK解压的路径来这,…