Python快速入门3:面向对象OOP(需要有编程基础)

面向对象是什么:

        面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它以对象为基础,将数据和操作封装在一起以创建可重用的代码模块。在面向对象编程中,对象是程序的基本单元,它们可以代表现实世界中的实体或概念,如人、车、动物等。面向对象编程的主要思想是将现实世界中的事物抽象为对象,并通过对象之间的交互来实现程序的功能。

面向对象编程的核心概念包括:

  1. 类与对象:类是对象的抽象,描述了具有相似属性和行为的一组对象的共同特征。对象是类的实例,它具体化了类的定义,并拥有类所描述的属性和行为。     

  2. 封装:封装是将数据和操作封装在对象内部的机制,隐藏了对象的内部细节,只对外部提供有限的接口。这样可以保护数据不受非法访问和意外修改,提高了代码的可维护性和可重用性。

  3. 继承:继承是一种机制,允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和行为,并可以在此基础上进行扩展或修改。通过继承,可以实现代码的重用和层次化的组织结构。

  4. 多态:多态是指同一个操作作用于不同的对象上时可以产生不同的行为。在面向对象编程中,多态通过方法的重写(覆盖)和方法的重载来实现。多态提高了代码的灵活性和可扩展性,使得程序更加易于理解和维护。

Python面向对象:

定义类:

        类有属性和方法,对应实体的属性和行为,类定义的语法格式:

class ClassName:<element_1>..<element_N><action_1>..<action_N>

例如: 

class Person:age = 18name = "Jack"def speak(self):return f'hello I am {self.name}'
Human = Person()
print(Human.speak())
#输出:hello I am Jack

 构造方法

        类有一个名为 __init__() 的特殊方法,也叫构造方法,类实例化对象时会自动调用这个方法,self指实例化的对象。

例如:

class Person:def __init__(self, name, age):self.age = ageself.name = namedef speak(self):return f"hello I am {self.name}, I'm {self.age} years old"
Human = Person('jack',18)
#输出:hello I am jack, I'm 18 years old

继承

        子类可以继承父类的属性和方法,并且在子类中还可以改写父类的属性和方法,子类也可以定义新的方法。

例如:

class Person:def __init__(self, n, a):self.age = aself.name = ndef run(self):return f"{self.name} is running"def speak(self):return f"hello I am {self.name}, I'm {self.age} years old"
class Student(Person):def __init__(self, stuId,n,a):Person.__init__(self,n,a)self.stuId = stuIddef speak(self):return f"hello I am {self.name}, I'm {self.age} years old, my student id is {self.stuId}"
Human = Person('jack',18)
xiaohong = Student("20180001","小红",18)print(xiaohong.speak())
print(xiaohong.run())
#输出如下
#hello I am 小红, I'm 18 years old, my student id is 小红
#小红 is running

私有属性与方法

        在类的属性或方法前加上__表示此属性或方法为私有属性与方法,子类无法继承和调用。

例如:

class Person:def __init__(self, n, a, money):self.age = aself.name = nself.__money = moneydef run(self):return f"{self.name} is running"def speak(self):return f"hello I am {self.name}, I'm {self.age} years old"def __spendMoney(self):return f"{self.name} 花了{self.__money}元"
class Student(Person):def __init__(self, stuId, n, a):Person.__init__(self, n, a, 100)self.stuId = stuIddef speak(self):return f"hello I am {self.name}, I'm {self.age} years old, my student id is {self.stuId}"xiaohong = Student("20180001","小红",18)
xiaohong.__spendMoney()#此句报错,无法调用

运算符重载:

         Python也可以进行运算符重载,直接调用类的专有方法就可以实现运算符重载。

例如:

class Purse:def __init__(self, a, b):self.money = aself.E_money = bdef __str__(self):return f"{self.money},{self.E_money}"def __add__(self, other):return Purse(self.money+other.money,self.E_money + other.E_money)
Purse1 = Purse(10,20)
Purse2 = Purse(30,40)
print(Purse1 + Purse2)
#输出:40,60

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

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

相关文章

mysql实战题目练习

1、创建和管理数据库 创建一个名为school的数据库。 列出所有的数据库&#xff0c;并确认school数据库已经创建。 如果school数据库已经存在&#xff0c;删除它并重新创建。 mysql> create database school; Query OK, 1 row affected (0.01 sec)mysql> mysql> sh…

Spring Boot:异常处理

Spring Boot 前言使用自定义错误页面处理异常使用 ExceptionHandler 注解处理异常使用 ControllerAdvice 注解处理异常使用配置类处理异常使用自定义类处理异常 前言 在 Spring Boot 中&#xff0c;异常处理是一个重要的部分&#xff0c;可以允许开发者优雅地处理应用程序中可…

复利效应(应用于成长)

应用 每个人在智力、知识、经验上&#xff0c;复利效应都一样&#xff0c;只要能积累的东西&#xff0c;基本上最终都会产生复利效应。 再来看一下复利公式&#xff1a;FP*(1i)^n P本金&#xff1b;i利率&#xff1b;n持有期限。在使用时&#xff0c;一定要注意4个限定条件&a…

AI图书推荐:ChatGPT等生成式AI在高等教育中的应用

自2022年11月以来&#xff0c;ChatGPT及其在高等教育各个层面的影响已成为所有教育对话的核心内容。Chan和Colloton所著的书籍是首批全面探讨ChatGPT与生成式人工智能&#xff08;GenAI&#xff09;在高等教育中应用及影响的作品之一。 该书深入研究了针对专业环境定制的AI素养…

js中Array的2个容易被遗忘的函数some和array

Array.prototype.some() 和 Array.prototype.every() 是 JavaScript 中的两个容易被遗忘的数组方法。它们都用于检查数组中的元素是否满足某个条件。 1. Array.prototype.some() some() 方法用于检查数组中至少有一个元素满足给定的条件。当找到满足条件的元素时&#xff0c;…

基础学习-Git(分布式版本控制系统)

学习视频推荐 http://【黑马程序员Git全套教程&#xff0c;完整的git项目管理工具教程&#xff0c;一套精通git】 https://www.bilibili.com/video/BV1MU4y1Y7h5/?p5&share_sourcecopy_web&vd_source2b85bd9be9213709642d908906c3d863 1、Git环境配置 安装Git Git下…

wireshark_概念

ARP (Address Resolution Protocol&#xff09;协议&#xff0c;即地址解析协议。该协议的功能就是将IP地址解析成MAC地址。 混杂模式 抓取经过网卡的所有数据包&#xff0c;包括发往本网卡和非发往本网卡的。 非混杂模式 只抓取目标地址是本网卡的数据包&#xff0c;对于发往…

《控制系统实验与综合设计》综合四至六(含程序和题目)

1.电机模型辨识实验 1.1 实验目的 &#xff08;1&#xff09;掌握一阶系统阶跃响应的特点&#xff0c;通过实验加深对直流电解模型的理解&#xff1b; &#xff08;2&#xff09;掌握系统建模过程中参数的整定&#xff0c;体会参数变化对系统的影响&#xff1b; &#xff0…

单片机开发板上外设资源讲解

单片机开发电路板上简单外设 开发板上各基础外设LED灯按键&#xff1a;数码管介绍液晶屏矩阵键盘扫描的概念LED点阵屏实时时钟蜂鸣器存储器 温度传感器&单总线 开发板上各基础外设 LED灯 中文名&#xff1a;发光二极管 外文名&#xff1a;Light Emitting Diode 简称&…

杨校老师项目之基于单片机STC89C52的智能环境监测系统【嵌入式】

获取全套资料&#xff1a; 有偿获取&#xff1a;mryang511688 技术&#xff1a;C语言、单片机等 摘要&#xff1a; 此设计可分为三个主要部分。此中的温度和湿度的检测功能&#xff0c;通过操纵单总线型温湿度传感器DHT11以数字形式显示&#xff0c;实现了切确测得温湿度的功能…

如何管理多个版本的Node.js

我们如何在本地管理多个版本的Node.js&#xff0c;有没有那种不需要重新安装软件再修改配置文件和环境变量的方法&#xff1f;经过我的查找&#xff0c;还真有这种方式&#xff0c;那就是nvm&#xff08;Node Version Manager&#xff09;。 下面我就给大家介绍下NVM的使用 1…

vs2019 c++中模板 enable_if_t 的使用

&#xff08;1&#xff09; 该模板的定义如下&#xff1a; template <bool _Test, class _Ty void> struct enable_if {}; // no member "type" when !_Testtemplate <class _Ty> struct enable_if<true, _Ty> { // type is _Ty for _Testusing …

Golang | Leetcode Golang题解之第89题格雷编码

题目&#xff1a; 题解&#xff1a; func grayCode(n int) []int {ans : make([]int, 1<<n)for i : range ans {ans[i] i>>1 ^ i}return ans }

MSR810-LM快速配置通过LTE模块上网

正文共&#xff1a;1111 字 13 图&#xff0c;预估阅读时间&#xff1a;1 分钟 之前买了一个无线版本的MSR810-W&#xff08;淘了一台二手的H3C企业路由器&#xff0c;就用它来打开网络世界的大门&#xff09;&#xff0c;并整理了一份快速配置&#xff08;脚本案例来了&#x…

三菱FX3U-4AD模拟量电压输入采集实例

硬件&#xff1a;&#xff30;&#xff2c;&#xff23;模块 &#xff26;&#xff38;&#xff13;&#xff27;&#xff21;-&#xff12;&#xff14;&#xff2d;&#xff34; &#xff1b;&#xff21;&#xff0f;&#xff24;模块&#xff26;&#xff38;&#xff13…

SQL——SERVER的建表主要操作

目录 一&#xff1a;数据存储问题 1.表的相关数据 2.表&#xff0c;字段&#xff0c;记录 二&#xff1a;建表 1.创建表头 2. 数据类型 3.保存数据 4.数据冗余 5.使用命令重置表 7.设置主键 一&#xff1a;数据存储问题 1.表的相关数据 表是数据库的基本单位&…

交互原型设计工具 Axure RP 9 for Mac 正式激活版

Axure RP 9 Pro Mac版是Mac平台上的一款专为快速原型设计而生的应用&#xff0c;Axure RP 9 Pro Mac版可以辅助产品经理快速设计完整的产品原型&#xff0c;并结合批注&#xff0c;说明以及流程图&#xff0c;框架图等元素&#xff0c;将产品完整地表述给各方面设计人员&#x…

Android Studio(AS)使用别人的项目与gradle包并运行项目

一、问题描述 在进行AS开发时&#xff0c;我们可能会使用到别人的项目&#xff0c;但发现别人把项目发给我们后会发现gradle项目同步失败o(≧口≦)o&#xff0c;此时计有三&#xff1a; 1.横行霸道、豪取抢夺&#xff1a;直接空降到项目人那里&#xff0c;强他的电脑占为己有…

Numpy的数组操作

文章目录 数组的创建创建全0的二维数组a(3,3)全1的二维数组b&#xff08;3,4&#xff09;随机数二维数数组c&#xff08;2,3&#xff09;效果截图 数组的属性查看b数组的维度查看b数组元素的个数效果截图 数组的维度操作将数组c的行变列&#xff0c;返回最后一个元素返回数组c第…

python 虚拟环境-最简单的教程

查看当前 python 的安装路径 which python 1、Anaconda创建虚拟环境 (1)执行命令&#xff1a;conda create --name env_name python3.10&#xff0c; 命令中我制定了环境名称是env_name&#xff0c;指定了Python版本是3.10&#xff0c;执行命令后&#xff0c;Conda会自动下…