当前位置: 首页 > news >正文

面向对象编程——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 和两个实例变量 makemodel。方法 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 类的实例都共享这个变量。而 nameage 是实例变量,每个 Dog 实例都有其自己的 nameage 值。

2.2.2 类的方法(Class Methods)

        方法是定义在类中的函数,用于执行与对象相关的操作。方法可以访问和修改对象的状态(实例变量)或类的状态(类变量)。方法分为几种类型:

  • 实例方法:最常见的方法类型,第一个参数通常是 self,它表示类的一个实例。
  • 类方法:使用装饰器 @classmethod 标记,第一个参数是 cls,它表示类本身。类方法可以访问和修改类变量。
  • 静态方法:使用装饰器 @staticmethod 标记,不接收 selfcls 参数。静态方法不能访问类或实例的任何属性,主要用于实现与类的状态无关的功能。
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 类的一个对象,具有独立的 makemodel 属性值,但共享 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技术在商业化道路上迈出了坚实的一步&#xff0…...

如何封装自动化测试框架?

封装自动化测试框架,测试人员不用关注框架的底层实现,根据指定的规则进行测试用例的创建、执行即可,这样就降低了自动化测试门槛,能解放出更多的人力去做更深入的测试工作。 本篇文章就来介绍下,如何封装自动化测试框…...

基于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主“潜艇伟伟迷”独立开发,带来了创新的游戏体验。如果你是策略游戏的爱好者,下面这份全面的下载和游玩攻略将是你的理想选择。 游戏亮点: 杂交植物系统:结合不同植物特性&#xff0c…...

小公司全栈是归宿吗?

在软件开发领域,特别是在小公司或初创公司中,全栈开发者的角色确实相对普遍和重要。然而,说“全栈是归宿”可能过于绝对,因为每个开发者的职业路径和兴趣点都是不同的。 以下是关于全栈开发在小公司的一些考虑: 需求…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...