Python—面向对象小解(1)

一、面向对象     

        面向对象编程(Object-Oriented Programming,简称 OOP)是一种程序设计范式,它通过使用“对象”和“类”来组织代码。Python 是一种面向对象的编程语言,支持 OOP 的核心概念。   

面向过程:

  • 侧重点是过程

  • 按照一定的顺序步骤完成对某一特定问题的处理

  • 如何将大象放入冰箱中?

    • 1-打开冰箱门

    • 2-将大象放入冰箱

    • 3-关上冰箱门

  • 如何将老虎放入冰箱中?

    • 1-打开冰箱门

    • 2-将老虎放入冰箱

    • 3-关上冰箱门

  • 如何将狮子关在笼子中?

    • 1-打开笼子门

    • 2-将狮子赶入笼子中

    • 3-关上笼子门

  • 面向过程需要针对某一类问题需要重复编写代码

面向对象:

  • 侧重点在对象

  • 将一类问题进行归纳总结,按照一个统一标准处理同一类问题

  • 如何将一项物品放入一个空间内?

    • 物品是什么?和空间是什么?

      • 处理的数据

    • 处理方式(动作) 函数功能

      • 打开

      • 关闭

  • 将一类问题分析后的内容进行类的创建,归纳过程

    • 针对类进行创建对象,对象是什么有数据本身决定

      • 数据是大象,对象就是一个大象对象

      • 大象的处理方式可以通过函数实现


面向过程的开发 比较简单快捷,但是需要重复编写代码

面向对象的开发 开发较复杂,需要考虑一类问题的处理,可以重复利用代码,不需要针对每个问题重复写代码

二、面向对象特性

        面向对象开发(OOP)的三大主要特性是:封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)。这些特性使得 OOP 能够创建模块化、可维护和可扩展的代码。下面详细介绍每个特性:

封装(Encapsulation)

封装是将对象的状态(属性)和行为(方法)捆绑在一起,并隐藏对象的内部实现细节。通过封装,类可以控制其属性的访问和修改,这有助于保护对象的完整性和防止外部代码对其进行不正当的操作。

class Person:def __init__(self, name, age):self.__name = name  # 私有属性self.__age = age    # 私有属性def get_name(self):return self.__namedef set_name(self, name):self.__name = namedef get_age(self):return self.__agedef set_age(self, age):if age > 0:self.__age = ageelse:raise ValueError("Age must be positive")# 创建对象
person = Person("Alice", 30)
print(person.get_name())  # 输出:Alice
print(person.get_age())   # 输出:30person.set_age(31)
print(person.get_age())   # 输出:31

继承(Inheritance)

        继承允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码重用。子类可以扩展或修改父类的行为。

class Animal:def __init__(self, name):self.name = namedef speak(self):raise NotImplementedError("Subclass must implement abstract method")class Dog(Animal):def speak(self):return f"{self.name} says Woof!"class Cat(Animal):def speak(self):return f"{self.name} says Meow!"# 创建对象
dog = Dog("Buddy")
cat = Cat("Whiskers")print(dog.speak())  # 输出:Buddy says Woof!
print(cat.speak())  # 输出:Whiskers says Meow!

多态(Polymorphism)

        多态允许不同类的对象通过相同的接口执行不同的操作。它使得代码可以处理不同类型的对象,而无需知道这些对象的具体类型。

class Animal:def speak(self):raise NotImplementedError("Subclass must implement abstract method")class Dog(Animal):def speak(self):return "Woof!"class Cat(Animal):def speak(self):return "Meow!"# 多态函数
def make_animal_speak(animal):print(animal.speak())# 使用多态函数
dog = Dog()
cat = Cat()make_animal_speak(dog)  # 输出:Woof!
make_animal_speak(cat)  # 输出:Meow!

三、匿名函数

和函数的作用一致,都是进行代码逻辑的封装,

区别1 在定义时,匿名函数可以不指定函数的名字

区别2 匿名函数执行实现简单的计算

区别3 匿名函数会自动将计算的结果返回

定义格式:

lambda 参数1,参数2...:计算逻辑(参数的处理逻辑)
# 匿名函数的使用
# 加法计算功能
def add(a,b):data = a+breturn datares = add(12,15)
print(res)# 使用匿名函数实现
# 定义匿名函数时,需要指定一个变量接收
f = lambda a,b:a+b# 使用变量调用匿名函数
print(type(f))
res2 = f(20,30)
print(res2)

使用场景:

        1、进行简单的数据计算

        2、匿名函数当成参数进行传递,实现对数据的处理

# 匿名函数成参数使用
rdd = [1,2,3,4,5,6]def reduce(f):# f参数  接收一个累加计算的函数计算的函数# 实现数据的遍历过程init = 0for i in rdd:# 遍历数据时进行数据的sum求和# 实际的pyspark开发中,sum求和的计算不在reduce中实现,由开发人员自己编写计算逻辑# init = init+iinit= f(init,i)return init# 开发人员在调用reduce函数编写数据的累加计算逻辑
res= reduce(lambda a,b:a+b)
print(res)

四、类的构成

面向对象开发的流程

        1-封装一个类

        2-使用类创建一个对象

在封装一个类的时候需要指定数据和行为,数据可以通过变量进行定义,在类中不叫变量,称为属性,行为可以通过函数进行定义,在类中称为方法

class 类名:属性name = '张三'方法def eat(self):def paly_game(self):# 调用类创建对象
object = 类名()   # 当前对象就是张三# 执行某个行为
object.eat()object.paly_game()

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

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

相关文章

Vitis HLS 学习笔记--块级控制协议-ap_ctrl_chain/ap_ctrl_hs/ap_ctrl_none

目录 1. 简介 2. 详细分析 2.1 使用场景区别 2.2 ap_continue 行为详解 2.3 ap_ctrl_chain 行为详解 3. 总结 1. 简介 块级控制协议允许硬件模块表明: 何时可以开始处理数据。何时完成了数据处理。以及何时处于空闲状态,准备接受新的数据输入。 …

C: error: request for member ‘tv_nsec‘ in something not a structure or union

文章目录 错误源代码原因是少了初始化用的逗号总结 错误 字面意思是,在非结构体,非联合体的某些事物里,请求成员(赋值)tv_nsec。 time.c:8:3: error: request for member tv_nsec in something not a structure or u…

这么多不同接口的固态硬盘,你选对了嘛!

固态硬盘大家都不陌生,玩游戏、办公存储都会用到。如果自己想要给电脑或笔记本升级下存储,想要存储更多的文件,该怎么选购不同类型的SSD固态盘呐,下面就来认识下日常使用中常见的固态硬盘。 固态硬盘(Solid State Drive, SSD)作为数据存储技术的革新力量,其接口类型的选…

【深度 Q 学习-01】 Q学习概念和python实现

文章目录 一、说明二、深度 Q 学习概念三、python实现四、结论 关键词:Deep Q-Networks 一、说明 在强化学习 (RL) 中,Q 学习是一种基础算法,它通过学习策略来最大化累积奖励,从而帮助智能体导航其环境。它…

气膜建筑的运营成本解析:高效节能的运作模式—轻空间

气膜建筑以其独特的优势和广泛的应用吸引了大量关注。然而,许多人对其持续吹气的运营成本产生了疑问。实际上,气膜建筑通过智能控制系统和高效的风机管理,大大降低了运营成本。本文将以2000平方米的气膜建筑为例,详细解析其运行成…

【PHP】半小时粒度填充一星期时间段

只能输入0和1,最大336位; 按照特定时间段时,01010100010010……表示指定特殊时段,半小时为粒度,用0、1标识是否选中,1为选中,0为未选中。一天24小时,即每天24 * 248位,共…

Vue3 - 实现一个雨水滴落的动画效果

在 Vue 3 中实现一个雨水滴落的动画效果,可以使用 HTML5 的 <canvas> 元素和 JavaScript 来绘制和控制动画。 以下是一个实现雨水滴落效果的示例: 创建一个 Vue 3 项目 首先,确保你已经创建了一个 Vue 3 项目。如果还没有,可以使用 Vue CLI 来创建: vue create r…

2024年社会发展、人文艺术与文化国际会议(ICSDHAC 2024)

2024年社会发展、人文艺术与文化国际会议&#xff08;ICSDHAC 2024&#xff09; 会议简介 2024年国际社会发展、人文、艺术和文化会议&#xff08;ICSDHAC 2024&#xff09;将在广州举行。会议旨在为从事社会发展、人文、艺术和文化研究的专家学者提供一个平台&#xff0c;分…

字符串操作:写一个方法,实现字符串的反转,如:输入abc,输出cba

import java.util.Scanner; public class Test_A15 {public static void main(String[] args){String strA"";System.out.println("请输入一串字符串:");Scanner scannernew Scanner(System.in);strAscanner.next();Test_A15 T15new Test_A15();String re…

leetCode.86. 分隔链表

leetCode.86. 分隔链表 题目思路&#xff1a; 代码 class Solution { public:ListNode* partition(ListNode* head, int x) {auto lh new ListNode(-1), rh new ListNode(-1);auto lt lh, rt rh;for(auto p head; p; p p->next ) {if(p->val < x) {lt lt->…

Midjourney保姆级教程(五):Midjourney图生图

Midjourney生成图片的方式除了使用文字描述生成图片外&#xff0c;还有“图生图”的方式&#xff0c;可以让生成的图片更接近参考的图片。 今天我们来聊聊“图生图”的方式。 一、模仿获取propmt 很多时候&#xff0c;我们不知道画什么内容的图片&#xff0c;大家可以关注内…

vue项目引入json/js文件批量或单个方法

vue项目 json // 方式一 &#xff1a; 将文件内容完整的引入 import json from ./src/assets/xxx.json console.log(json) console.log(---)// 方式二 &#xff1a; 部分引入-名称必须是文件中定义的key import {name1,name2} from ./src/assets/xxx.json console.log(name1)…

SRS视频服务器应用研究

1.SRS尝试从源码编译启动 1.1.安装ubuntu 下载镜像文件 使用VMWare安装&#xff0c;过程中出现蓝屏&#xff0c;后将VM的软件版本从15.5升级到17&#xff0c;就正常了。 1.2.更新ubuntu依赖

第二十四章多栏布局解决方案(什么是自适应?/)

什么是自适应? 指能使网页自适应显示在不同大小终端设备上新网页设计方式及技术.简单的来说自适应就是让同一个页面自动适应不同大小的设备&#xff0c;从而解决为不同设备提供不同版本的页面问题。 1&#xff0e;两列自适应 两列自适应布局是指左侧固定宽度&#xff0c;右…

低代码开发与人工智能技术在商品推荐系统中的应用

引言 低代码开发和人工智能技术的背景和重要性 随着数字化转型的深入&#xff0c;企业在信息技术领域面临着前所未有的挑战和机遇。快速变化的市场需求、日益复杂的技术环境以及高度竞争的商业环境&#xff0c;迫使企业不断寻求高效的开发和运营解决方案。低代码开发平台应运而…

Java基础入门day58

day58 EL表达式 概念 EL&#xff1a;expression language EL使得JSP写起来更简单、简介&#xff0c;主要用于获取作用域中的数据 语法 可以使用${}获取指定作用域中的数据 用于替换作用域.getAttribute("name") ${scope.name}获取指定的某个作用域中的数据 ${name}…

【java-数据结构19-队列的模拟实现】

上篇文章&#xff0c;小编已经带大家一起认识了队列&#xff0c;并且对队列的方法进行调用测试&#xff0c;下面我们将模拟实现一个队列&#xff0c;话不多说&#xff0c;上正文~ 1.队列的模拟实现 队列的实现方法和链表的实现方式一模一样&#xff0c;这里我们首选双链表&…

VirtualBox虚拟机与bhyve虚拟机冲突问题解决@FreeBSD

问题 在安装完bhyve虚拟系统的主机上启动VirtualBox虚拟机的时候&#xff0c;报错&#xff1a;不能为虚拟电脑 debian 打开一个新任务. VirtualBox cant operate in VMX root mode. Please close all other virtualization programs. (VERR_VMX_IN_VMX_ROOT_MODE). 返回 代码…

UWP与WPF:微软两大UI框架

在微软的开发者生态系统中&#xff0c;UWP(Universal Windows Platform)与WPF(Windows Presentation Foundation)是构建Windows应用的两大明星框架。它们各自携带独特的设计理念和技术特性&#xff0c;服务于不同的开发需求和应用场景。本文将深入探讨这两者之间的异同&#xf…

项目成功的关键要素:进度管理

在项目管理中&#xff0c;进度管理是决定项目成败的关键因素之一。它关乎项目能否在预定的时间范围内高效、准确地完成既定目标。 一、进度管理的重要性 1、时间控制&#xff1a;项目的成功往往与时间的把握息息相关。进度管理能够确保项目在既定的时间框架内有序进行&#x…