【python实操】python小程序之定义类

news2024/11/24 20:42:25

引言

python小程序之定义类

文章目录

  • 引言
  • 一、定义类
    • 1.1 题目
    • 1.2 代码
    • 1.3 代码解释
  • 二、思考
    • 2.1 面向对象编程(OOP)原则
    • 2.2 self` 参数
    • 2.3 内存地址
    • 2.4 代码的可读性和可维护性

一、定义类

1.1 题目

小猫爱吃鱼,小猫要喝水,定义不带属性的类

1.2 代码

class Cat:
    def eat(self):
        print(f'{id(self)}, self')
        print('⼩猫爱吃⻥...')


# 2. 创建对象
blue_cat = Cat()
print(f'{id(blue_cat)}, blue_cat')
# 3. 通过对象调⽤类中的⽅法
blue_cat.eat()
# blue_cat 对象调⽤ eat ⽅法, 解释器就会将 blue_cat 对象传给 self
print('_*_' * 30)
# 创建对象
black_cat = Cat()
print(f"{id(black_cat)}, black_cat")
black_cat.eat()
# black_cat 对象调⽤ eat ⽅法, 解释器就会将 black_cat 对象传给 self

输出结果:
在这里插入图片描述

1.3 代码解释

这段代码展示了 python 中面向对象编程的基本概念,包括类的定义、对象的创建以及通过对象调用类方法

  1. 定义一个 Cat 类:
class Cat:
    def eat(self):
        print(f'{id(self)}, self')
        print('小猫爱吃鱼...')

在这个类中,定义了一个名为 eat 的方法。该方法有一个参数 self,这是 python 中的一个约定,代表类的实例本身。在类的方法中,self 参数用于访问实例的属性和方法
2. 创建 Cat 类的一个实例 blue_cat

blue_cat = Cat()
print(f'{id(blue_cat)}, blue_cat')

这里,Cat() 创建了一个新的 Cat 类的实例,并将其赋值给变量 blue_cat
print(f'{id(blue_cat)}, blue_cat') 这行代码打印了 blue_cat 实例的内存地址(使用 id() 函数)和实例的名称
3. 通过 blue_cat 实例调用 eat 方法:

blue_cat.eat()

blue_cat.eat() 被调用时,python 解释器自动将 blue_cat 实例作为第一个参数传递给 eat 方法,这个参数在方法定义中被命名为 self。因此,在 eat 方法内部的 self 就是指向 blue_cat 实例的引用。打印 id(self) 就会输出 blue_cat 实例的内存地址
4. 输出一条分隔线:

print('_*_' * 30)

这行代码只是简单地打印一条由 _*_ 组成的分隔线,没有其他实际功能
5. 创建另一个 Cat 类的实例 black_cat

black_cat = Cat()
print(f"{id(black_cat)}, black_cat")

与创建 blue_cat 实例类似,这里创建了另一个 Cat 类的实例 black_cat,并打印了它的内存地址
6. 通过 black_cat 实例调用 eat 方法:

black_cat.eat()

同样的,当 black_cat.eat() 被调用时,python 解释器将 black_cat 实例作为第一个参数传递给 eat 方法。打印 id(self) 会输出 black_cat 实例的内存地址,这个地址与 blue_cat 的地址不同,因为它们是两个不同的实例

当这段代码运行时,它将输出两个不同的内存地址,分别对应 blue_catblack_cat 实例,以及两行“小猫爱吃鱼…”。这表明了每个实例都有自己的 self,即每个实例都是独立的


PS:SELF的解释

  1. 从函数的语法上讲,self是形参,就可以是任意的变量名,只不过我们习惯性将这个形参写作self
  2. self是普通的形参, 但是在调用的时候没有传递实参值,原因是python 解释器在执行代码的时候,自动的将调用,用这个方法的对象传递给了self,即 self 的本质是对象
  3. 验证,只需要确定通过哪个对象调用,对象的引用和self的引用是⼀样的
  4. self是函数中的局部变量,直接创建的对象是全局变量

二、思考

2.1 面向对象编程(OOP)原则

  • 封装:代码通过定义一个 Cat 类来封装与猫相关的行为(如 eat 方法)。这意味着与猫相关的数据和功能被捆绑在一起,便于管理和重用
  • 实例化:通过 Cat() 创建了两个不同的实例 blue_catblack_cat,每个实例都有自己独立的内存空间,但共享同一套方法

2.2 self` 参数

  • 在 Python 的类方法中,self 参数代表类的实例本身。通过 self,可以在方法内部访问实例的属性和其他方法
  • 当调用 blue_cat.eat()black_cat.eat() 时,Python 自动将实例本身作为第一个参数传递给方法,即 self 参数

2.3 内存地址

  • 使用 id() 函数打印实例的内存地址有助于理解每个实例都是独立的。即使 blue_catblack_cat 都是 Cat 类的实例,它们在内存中的位置是不同的

2.4 代码的可读性和可维护性

  • 打印内存地址有助于调试,但在实际应用中,通常不会在输出中包含内存地址,因为这对于最终用户来说没有意义
  • 使用 print 语句来输出信息可以帮助理解代码的执行流程,但在生产环境中,日志记录通常会更加详细和结构化

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

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

相关文章

Vue (快速上手)

Vue 初识Vue 在Vscode中创建html文件&#xff0c;然后打开该文件&#xff0c;输入英文!即可显示出提示框&#xff0c;选定第一个即可出现默认的html模板。 案例一&#xff1a;值的传递 使用大括号{{}}声明 一个将要被Vue所控制的 DOM 区域&#xff0c;其值可以在<script&…

构建数字化生态平台,开启企业新未来

随着数字化时代的到来&#xff0c;构建数字化生态平台已成为企业获取竞争优势、实现可持续发展的重要途径。数字化生态平台是指利用数字技术构建的&#xff0c;能够整合多方资源&#xff0c;为用户提供一站式服务和价值的开放平台。 数字化生态平台的特点 1.开放性&#xff1a…

Vue/组件的生命周期

这篇文章借鉴了coderwhy大佬的Vue生命周期 在Vue实例化或者创建组件的过程中 内部涉及到一系列复杂的阶段 每一个阶段的前后时机都可能对应一个钩子函数 以下是我根据coderwhy大佬文章对于每一个阶段的一些看法 1.过程一 首先实例化Vue或者组件 在实例化之前 会对应一个钩子函…

Android 组件化利器:WMRouter 与 DRouter 的选择与实践

在移动端开发中&#xff0c;组件化 和 模块化 是常见的开发策略。随着项目的规模增大&#xff0c;不同功能之间的依赖、耦合度会变得越来越复杂&#xff0c;模块间的解耦成为不可避免的需求。路由框架正是在这种需求背景下应运而生。本文我们将讨论两款在Android开发中比较流行…

PyEcharts教程(002):上手PyEcharts

2、上手PyEcharts&#xff08;以jupyter notebook编译&#xff09; 2.1 如何查看pyecharts版本 import pyecharts print(pyecharts.__version__)2.2 上手Pyecharts 首先绘制第一个图表 from pyecharts.charts import Bar # 创建柱形图对象 bar Bar() # 添加x轴 bar.add_xa…

51单片机的红外感应洗手器【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机红外感应传感器继电器LED等模块构成。适用于智能红外感应自动洗手器等相似项目。 可实现功能: 1、红外感应传感器实时检测是否有人体接近&#xff08;距离小于20cm&#xff09; 2、如果有人靠近&#xff0c;继电器自动闭合&#…

ZJYYC2360. 圆球的最大得分

思路&#xff1a;这是一道区间dp的题目。最大的数放在最远处会更优&#xff0c;所以每个小孩可以放在 l 处或 r 处&#xff0c;即这段区间的最左边或最右边。这题可以用记忆化搜索来写&#xff0c;用dp[l][r]来记录 i ~ j 之间调整位置后的最大得分。 #include <bits/stdc.…

学校周赛(3)

​ A: 题目&#xff1a; ​​​​​​​ 解题&#xff1a; 本道题木只需要找到一个*的位置&#xff0c;并且查看这个*是否满足四种情况即可&#xff0c;对与判断的体哦见是四周不出现任何的*,由于每次搜索我们首先搜索到的的最左上角的*,因此我们以左上角的为中心进行讨论…

在VSCode中使用Excalidraw

概述 Excalidraw是一款非常不错的示意图绘制软件&#xff0c;没想到在VSCode中有其扩展&#xff0c;可以在VScode中直接使用。 安装扩展 使用 需要创建.excalidraw.svg、.excalidraw或.excalidraw.png等名称的文件。 搭配手写版使用 自由画笔工具可以配合手写板&#xff0c…

【算法】DFS 系列之 穷举/暴搜/深搜/回溯/剪枝(下篇)

【ps】本篇有 8 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1&#xff09;字母大小写全排列 .1- 题目解析 .2- 代码编写 2&#xff09;优美的排列 .1- 题目解析 .2- 代码编写 3&#xff09;N 皇后 .1- 题目解析 .2- 代码编写 4&#xff09;有效的数独 .1-…

教育领域的技术突破:SpringBoot系统实现

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

Excel中的屠龙大招

indirect的地位部分动摇&#xff0c;神坛下已初生大力骑士——“”。 (笔记模板由python脚本于2024年10月06日 18:57:11创建&#xff0c;本篇笔记适合同时喜欢python和Excel的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&…

C++——模拟实现list

1.初步实现结点和链表 namespace jxy {template<class T>struct list_node{T _data;list_node<T>* _prev;list_node<T>* _next;list_node(const T& x T()):_data(x),_prev(nullptr),_next(nullptr){}};template<class T>class list//list的框架本…

C# 雷赛运动控制器 SMC304 新建工程

雷赛SMC304资料下载地址 https://www.leisai.com/cn/cpzx/info_36_itemid_3389_lcids_140_cid_3340.html 在官网下载需要的资料 新建文件 在官网下载的资料中找出需要三个文件 把文件添加到现有的项目中 编译选择x64 将连接雷赛电脑的网口IP号改为&#xff1a;如下图所示

深度学习环境安装

**前置知识&#xff1a; 1、各个软件之间的关系&#xff1a; pytorch/tensorflow库&#xff0c;调用cuda runtime version&#xff0c;接着cuda调用驱动&#xff08;cuda driver version&#xff09;&#xff0c;最后驱动又调用GPU显卡。 Anaconda&#xff1a; 集成了python&…

华为海思:大小海思的双轮驱动战略分析

华为海思,作为华为旗下的半导体设计部门,近年来在芯片设计领域取得了显著成就,成为了中国乃至全球芯片设计的重要力量。实际上,华为海思并非单一实体,而是由两个主要分支构成:大海思和小海思。这两个分支虽然同属华为海思,但在定位、产品布局以及市场策略上有所不同,共…

YOLOv8改进 - 注意力篇 - 引入EMA注意力机制

一、本文介绍 作为入门性篇章&#xff0c;这里介绍了EMA注意力在YOLOv8中的使用。包含EMA原理分析&#xff0c;EMA的代码、EMA的使用方法、以及添加以后的yaml文件及运行记录。 二、EMA原理分析 EMA官方论文地址&#xff1a;EMA文章 EMA代码&#xff1a;EMA代码 EMA注意力机…

Oracle中MONTHS_BETWEEN()函数详解

文章目录 前言一、MONTHS_BETWEEN()的语法二、主要用途三、测试用例总结 前言 在Oracle数据库中&#xff0c;MONTHS_BETWEEN()函数可以用来计算两个日期之间的月份差。它返回一个浮点数&#xff0c;表示两个日期之间的整月数。 一、MONTHS_BETWEEN()的语法 MONTHS_BETWEEN(dat…

毕业设计项目 基于大数据人才岗位数据分析

文章目录 1 前言1. 数据集说明2. 数据处理2.1 数据清洗2.2 数据导入 3. 数据分析可视化3.1 整体情况&#xff08;招聘企业数、岗位数、招聘人数、平均工资&#xff09;3.2 企业主题行业情况公司类型最缺人的公司 TOP平均薪资最高的公司 TOP工作时间工作地点福利词云 3.3 岗位主…

晶体管最佳效率区域随频率逆时针旋转原因分析

晶体管最佳效率区域随频率逆时针旋转原因分析 在功率放大器的设计时&#xff0c;晶体管最佳区域随频率逆时针旋转。但是&#xff0c;对于一般的微带电路&#xff0c;匹配阻抗区域是随着频率顺时针旋转的&#xff08;也有称这个特性是Foster特性&#xff09;&#xff0c;因此功…