面向对象编程——python
目录
一、面向对象编程
1.1 类和对象
1.2 继承
1.3 封装
1.4 多态
1.5 Python中的面向对象编程
二、类、对象和变量
2.1 类(Class)
2.2.1 类的属性(Class Attributes)
2.2.2 类的方法(Class Methods)
2.2 对象(Object)
2.3 变量(Variable)
三、总结
一、面向对象编程
面向对象编程(Object-Oriented Programming,简称 OOP)是一种编程范式,它使用“对象”来设计软件。在这种范式中,对象是类的实例,类定义了对象的数据属性和可执行的操作(即方法)。面向对象编程的主要目标是增加软件的重用性、灵活性和扩展性。
1.1 类和对象
类(Class):定义了一组属性和方法的蓝图。类是对象的模板,确定了对象的数据结构和行为。
对象(Object):类的实例。每个对象都拥有类中定义的属性和方法。
1.2 继承
允许一个类继承另一个类的特性。子类继承父类的公共接口,这样代码可以被重用,并且可以创建出层次结构。
1.3 封装
将数据(属性)和代码(方法)捆绑在一起,形成一个独立的对象。这种机制可以隐藏内部实现细节,只暴露必要的操作接口。
1.4 多态
允许以统一的方式处理不同类的对象。通常通过方法重写(子类定义与父类同名的方法)和接口(定义可以由多个类实现的同一套操作)实现。
1.5 Python中的面向对象编程
Python 是一种支持多范式的语言,包括面向对象编程。下面是一个简单的 Python 中使用 OOP 的例子:
# 定义一个类
class Animal:def __init__(self, name): # 构造函数self.name = name # 属性def speak(self): # 方法raise NotImplementedError("Subclass must implement abstract method")# 定义继承自 Animal 的类
class Dog(Animal):def speak(self):return "Woof!"class Cat(Animal):def speak(self):return "Meow!"# 使用类创建对象
dog = Dog("Buddy")
cat = Cat("Whiskers")# 调用方法
print(dog.speak()) # 输出: Woof!
print(cat.speak()) # 输出: Meow!
二、类、对象和变量
在面向对象编程(OOP)中,理解类、对象、和变量之间的关系对于编写高质量的代码是非常重要的。下面我们将更详细地讨论这些概念,以及它们是如何相互作用和支持编程模型的。
2.1 类(Class)
类是一种复合数据类型,是对象的蓝图或模板。你可以将类视为一个创建对象的配方。类定义了一系列属性(变量)和方法(函数),这些属性和方法被该类的所有实例所共享。
- 属性(Attributes):是绑定到类或类的实例上的变量。它们用于存储数据或状态。
- 方法(Methods):是定义在类内部的函数,用于描述类的行为或与对象的交互方式。
class Car:wheels = 4 # 类变量,所有 Car 实例共享def __init__(self, make, model):self.make = make # 实例变量self.model = model # 实例变量def display_info(self):return f"{self.make} {self.model} has {Car.wheels} wheels"
在这个例子中,Car 类定义了一个类变量 wheels 和两个实例变量 make 和 model。方法 display_info 是一个实例方法,用来显示车辆的信息。
在面向对象编程(OOP)中,类是构建和管理数据的主要方式。类通过其属性和方法定义了其实例的结构和行为。理解类的属性和方法对于有效使用面向对象编辑至关重要。下面我们将详细探讨类的属性和方法,并提供相应的代码示例。
2.2.1 类的属性(Class Attributes)
类的属性是绑定到类本身的变量,它们定义了与类相关的数据。类的属性可以是实例变量或类变量:
- 实例变量:这些变量是为类的每个实例单独存储的。每个对象可以拥有实例变量的独立副本。
- 类变量:这些变量是由类的所有实例共享的。它们不属于任何一个实例,而是属于类本身。
class Dog:species = "Canine" # 类变量,所有 Dog 实例共享def __init__(self, name, age):self.name = name # 实例变量self.age = age # 实例变量
在这个例子中,species 是一个类变量,所有 Dog 类的实例都共享这个变量。而 name 和 age 是实例变量,每个 Dog 实例都有其自己的 name 和 age 值。
2.2.2 类的方法(Class Methods)
方法是定义在类中的函数,用于执行与对象相关的操作。方法可以访问和修改对象的状态(实例变量)或类的状态(类变量)。方法分为几种类型:
- 实例方法:最常见的方法类型,第一个参数通常是
self,它表示类的一个实例。 - 类方法:使用装饰器
@classmethod标记,第一个参数是cls,它表示类本身。类方法可以访问和修改类变量。 - 静态方法:使用装饰器
@staticmethod标记,不接收self或cls参数。静态方法不能访问类或实例的任何属性,主要用于实现与类的状态无关的功能。
class Dog:species = "Canine" # 类变量def __init__(self, name, age):self.name = name # 实例变量self.age = age # 实例变量def speak(self): # 实例方法return f"{self.name} says Woof!"@classmethoddef get_species(cls): # 类方法return cls.species@staticmethoddef info(): # 静态方法return "Dogs are domestic animals."
在这个例子中,speak 是一个实例方法,它使用 self 来访问调用它的特定实例的属性。get_species 是一个类方法,它使用 cls 来访问类变量。info 是一个静态方法,它不访问任何实例或类属性。
2.2 对象(Object)
对象是类的实例。当类被实例化时,计算机内存中将创建一个对象。这个对象包含其类定义的所有属性,并且可以使用定义在类中的方法。
- 实例化:创建类的实例的过程称为实例化,这通常通过调用类的构造方法(
__init__方法)来完成。
my_car = Car("Toyota", "Corolla") # 创建 Car 类的一个实例
print(my_car.display_info()) # 输出: Toyota Corolla has 4 wheels
这里 my_car 指向的是 Car 类的一个对象,具有独立的 make 和 model 属性值,但共享 wheels 属性。
2.3 变量(Variable)
变量是编程中用来存储数据的基本单位。在面向对象编程中,变量可以有几种不同的形式:
- 局部变量:在方法中定义,只在方法的作用域内可见。
- 实例变量:通过使用
self关键字在类的方法中定义,与特定的对象实例绑定。 - 类变量:在类定义中创建,为类的所有实例共享。
class Car:wheels = 4 # 类变量def __init__(self, make, model):self.make = make # 实例变量self.model = model # 实例变量def update_wheels(self, number):Car.wheels = number # 修改类变量# 修改 Car 类的 wheels 类变量
my_car = Car("Toyota", "Corolla")
another_car = Car("Honda", "Civic")
my_car.update_wheels(6)
print(another_car.wheels) # 输出: 6,展示类变量是如何被所有实例共享的
三、总结
面向对象编程(OOP)是一种将程序视为一系列交互的“对象”的编程范式,每个对象都是其特定类的实例。类定义了对象的结构(属性)和可以执行的操作(方法)。这种方法不仅有助于增强软件的可重用性、可维护性和灵活性,还通过封装、继承和多态等核心概念来简化复杂系统的开发和管理。利用类和对象,开发者可以更高效地编写模块化的代码,更容易地修改和扩展已有功能,从而应对日益复杂的软件开发需求。
相关文章:
面向对象编程——python
目录 一、面向对象编程 1.1 类和对象 1.2 继承 1.3 封装 1.4 多态 1.5 Python中的面向对象编程 二、类、对象和变量 2.1 类(Class) 2.2.1 类的属性(Class Attributes) 2.2.2 类的方法(Class Methods…...
【LeetCode】每日一题:合并K个升序链表
给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 解题思路 分治加两个链表合并,或者用根堆,根堆的初始化方法很值得背诵,还涉及lambda的用法 AC代码 # Defini…...
从零开始学docker(四)-安装mysql及主从配置(一)
mysql MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关…...
【目标检测】Yolov8 完整教程 | 检测 | 计算机视觉
学习资源:https://www.youtube.com/watch?vZ-65nqxUdl4 努力的小巴掌 记录计算机视觉学习道路上的所思所得。 1、准备图片images 收集数据网站:OPEN IMAGES 2、准备标签labels 网站:CVAT 有点是:支持直接导出yolo格式的标…...
新能源汽车 LabCar 测试系统方案(-)
什么是LabCar测试 LabCar测试目标是进行整车黄板台架功能测试,用于整车开发和测试阶段,满足设计人员和测试人员的试验需求,以验证整车性能,减少开发工作量。系统主要用于测试静态及动态工况下的纯电动汽车的各项功能实现情况。 …...
机器学习辅助的乙醇浓度检测(毕设节选)
目录 1.为什么要机器学习 2. 神经网络一般组成 3.BP神经网络工作过程 4.评价指标 5.实操代码 1.为什么要用机器学习 人工分析大量的谐振模式,建立各种WGM的响应与未知目标之间的关系,是一个很大的挑战。机器学习(ML)能够自行识别全谱的全部特征。作为…...
YOLO系列改进
yolo核心思想:把目标检测转变成一个回归问题。将整个图像作为网络的输入,仅仅经过一个神经网络,得到边界框的位置及其所属的类别。 YOLOv1 CVPR2016 输出7730的张量表示2个框的5个参数和20个种类。leaky ReLU,leaky并不会让负数…...
cuda与cudnn下载(tensorflow-gpu)
目录 前言 正文 前言 !!!tensorflow-gpu的版本要与cuda与cudnn想对应。这点十分重要!推荐下载较新的。即tensorflow-gpu2.60及以上,cuda11.x及以上,cudnn8.x及以上。 所以,下载之前先检查好…...
git 多分支实现上传文件但避免冲突检测
文章目录 背景实现步骤 背景 对于某些通过命令生成的配置文件(如 TypeScript 类型文件等) 实现步骤 1...
聊聊 golang 中 channel
1、引言 Do not communicate by sharing memory; instead, share memory by communicating Golang 的并发哲学是“不要通过共享内存进行通信,而要通过通信来共享内存”,提倡通过 channel 进行 goroutine 之间的数据传递和同步,而不是通过共享…...
SK Hynix 3D DRAM良率突破56.1%,开启存储新时代
根据韩国财经媒体Business Korea独家报道:在刚刚结束的VLSI 2024国际研讨会上,韩国半导体巨头SK Hynix公布了一项振奋人心的进展:其五层堆叠3D DRAM的制造良率已达到56.1%。此成果标志着3D DRAM技术在商业化道路上迈出了坚实的一步࿰…...
如何封装自动化测试框架?
封装自动化测试框架,测试人员不用关注框架的底层实现,根据指定的规则进行测试用例的创建、执行即可,这样就降低了自动化测试门槛,能解放出更多的人力去做更深入的测试工作。 本篇文章就来介绍下,如何封装自动化测试框…...
基于Java的在线编程考试系统【附源码】
毕业设计(论文) 题目:基于 二级学院: 现代技术学院 专业(方向): 计算机应用技术 班 级: 计科B2015 学 生: 指导教师: 2024年1月 29 日 本科毕业论文(设计)学术诚信声明 本人郑重…...
Beautiful Soup的使用
1、Beautiful Soup简介 Beautiful Soup是一个Python的一个HTML或XML的解析库,我们用它可以方便地从网页中提取数据。 Beautiful Soup 提供一些简单的、Python 式的函数来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓…...
633. 平方数之和(中等)
633. 平方数之和 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java内存溢出溢出代码正确代码与截图 1. 题目描述 题目中转:633. 平方数之和 2.详细题解 本题是167. 两数之和 II - 输入有序数组(中等)题目的变型,由两数之和变…...
GIT回滚
1. 使用 git revert git revert 命令会创建一个新的提交,这个提交会撤销指定提交的更改。这通常用于公共分支(如 main 或 master),因为它不会重写历史。 git revert HEAD # 撤销最近的提交 # 或者指定一个特定的提交哈希值 …...
BEVM基于OP-Stack发布首个以WBTC为GAS连接以太坊和比特币生态的中继链
为了更好的连接以太坊和比特币生态,BEVM团队正在基于OPtimism的OP Stack来构建一个以WBTC为GAS兼容OP-Rollup的中继链,这条中继链将作为一种完全去中心化的中间层,把以太坊上的主流资产(WBTC/ ETH/USDC/USDT等)引入到BEVM网络。 不仅如此&am…...
【vuejs】 $on、$once、$off、$emit 事件监听方法详解以及项目实战
1. Vue实例方法概述 1.1 vm.$on vm.$on是Vue实例用来监听自定义事件的方法。它允许开发者在Vue实例上注册事件监听器,当事件被触发时,指定的回调函数会被执行。 事件监听:vm.$on允许开发者绑定一个或多个事件到Vue实例上,并且可…...
如何下载植物大战僵尸杂交版,最全攻略来了
《植物大战僵尸杂交版》由热爱原版游戏的B站UP主“潜艇伟伟迷”独立开发,带来了创新的游戏体验。如果你是策略游戏的爱好者,下面这份全面的下载和游玩攻略将是你的理想选择。 游戏亮点: 杂交植物系统:结合不同植物特性,…...
小公司全栈是归宿吗?
在软件开发领域,特别是在小公司或初创公司中,全栈开发者的角色确实相对普遍和重要。然而,说“全栈是归宿”可能过于绝对,因为每个开发者的职业路径和兴趣点都是不同的。 以下是关于全栈开发在小公司的一些考虑: 需求…...
告别串口打印!在Mac上用JLink RTT实现STM32高效调试日志(附完整代码)
在Mac上使用JLink RTT实现STM32高效调试日志的完整指南 对于嵌入式开发者而言,调试信息的输出一直是开发过程中的关键环节。传统串口打印虽然简单易用,但在实际项目中常常面临接线复杂、占用宝贵硬件资源、传输速度受限等问题。特别是在Mac平台上&#…...
终极指南:免费解锁WeMod高级功能的完整方案
终极指南:免费解锁WeMod高级功能的完整方案 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 还在为WeMod Pro的订阅费用而犹豫吗?…...
ServerPackCreator:3分钟搞定Minecraft服务器包配置的智能自动化工具
ServerPackCreator:3分钟搞定Minecraft服务器包配置的智能自动化工具 【免费下载链接】ServerPackCreator Create a server pack from a Minecraft Forge, NeoForge, Fabric, LegacyFabric or Quilt modpack! 项目地址: https://gitcode.com/gh_mirrors/se/Server…...
资深工程师如何应对年龄增长带来的工作挑战:从照明优化到人体工学实践
1. 从一次生日派对说起:工程师的“年龄”与“视界”去年,我参加了一个在餐厅举办的50岁生日派对。餐厅的灯光有些昏暗,当菜单递过来时,除了我,桌上的每个人都掏出了手机,打开了LED手电筒。而在隔壁桌&#…...
CFD热分析中绝热传热系数与叠加核函数原理及应用
1. CFD热分析中的绝热传热系数与叠加核函数原理剖析在电子设备热管理领域,随着功率密度的不断提升,传统的热设计方法已难以满足精度和效率的双重要求。绝热传热系数(Adiabatic Heat Transfer Coefficient, AHTC)与叠加核函数(Superposition Kernel Funct…...
基于MCP协议构建AI助手与外部应用桥接:以hikerapi-mcp为例的实战指南
1. 项目概述与核心价值最近在折腾一些自动化工作流,发现很多工具之间的数据流转是个大问题。比如,我想把某个文档里的关键信息提取出来,自动生成一个任务列表,再推送到另一个项目管理工具里。这个过程如果手动操作,不仅…...
MoneyPrinter监控面板搭建终极指南:实时追踪YouTube Shorts自动化生成状态
MoneyPrinter监控面板搭建终极指南:实时追踪YouTube Shorts自动化生成状态 【免费下载链接】MoneyPrinter Automate Creation of YouTube Shorts using MoviePy. 项目地址: https://gitcode.com/gh_mirrors/mo/MoneyPrinter 想要实时掌握YouTube Shorts自动化…...
OpenClaw数据备份实战:基于Synology NAS的增量备份与安全恢复方案
1. 项目概述与核心价值如果你和我一样,把OpenClaw当作一个重要的生产力工具,用它来管理项目、运行自动化任务,甚至托管一些关键的业务逻辑,那么数据安全就成了一个绕不开的话题。我见过太多因为硬盘突然挂掉、云服务商出问题&…...
Rust微信SDK实战:构建高性能、类型安全的微信机器人
1. 项目概述与核心价值 最近在折腾一些需要与微信生态深度交互的自动化项目,比如自动回复、消息监控、群管理工具等。这类需求在电商客服、社群运营、企业内部流程自动化等场景下非常普遍。传统的做法往往是基于官方提供的HTTP API,自己封装请求、处理复…...
2025届毕业生推荐的五大降AI率平台横评
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 当前,在生成式AI普及应用这个阶段,内容辨识度偏高这种情况࿰…...
