Python类中变量定义详解

2024-06-19 12:52

本文主要是介绍Python类中变量定义详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

✨前言:

Python中的类可以定义两种类型的变量:类变量和实例变量。
类变量(Class Variables): 类变量是在类级别上定义的变量,它们是对所有实例共享的。这意味着类变量只有一个副本,无论你创建了多少个类的实例,类变量的值都是相同的。如果你通过任意一个实例或者类本身改变了类变量的值,这个改变对所有实例都是可见的。

✨一、类变量与实例变量的概念

类变量,也称为静态变量,是定义在类内部但在方法之外的变量。它属于类本身,而不属于任何一个具体的对象实例。所有对象实例共享同一个类变量。一旦类变量的值发生变化,这种变化将反映到所有对象实例上。

实例变量则属于类的实例(即对象)。每个对象实例都有自己独立的实例变量,不同对象实例的实例变量互不影响。

✨二、类变量与实例变量的特性

🌟类变量的特性

类变量在内存中只有一个拷贝(节省内存),当任何一个对象实例的类变量值发生改变时,其他对象实例的类变量值也随之改变。
类变量可以通过类名直接访问,也可以通过对象实例访问。
类变量通常用于存储与类本身相关的、不随对象实例改变的信息。

🌟实例变量的特性

每个对象实例都有自己的实例变量副本,因此不同对象实例的实例变量值可以不同。
实例变量只能通过对象实例访问,不能通过类名直接访问。
实例变量通常用于存储与对象实例相关的、随对象实例状态改变的信息。

✨举个例子:

class MyClass:shared_var = 10  # 类变量def __init__(self, instance_var_value):self.instance_var = instance_var_value  # 实例变量# 访问类变量
print(MyClass.shared_var)  # 输出: 10# 修改类变量
MyClass.shared_var = 20
print(MyClass.shared_var)  # 输出: 20# 实例化对象
obj1 = MyClass(1)
obj2 = MyClass(2)# 访问同一个类变量
print(obj1.shared_var)  # 输出: 20, 即使是通过实例访问, 也反映了类变量的更改
print(obj2.shared_var)  # 输出: 20

从上面的代码可以看出,类变量shared_var在所有实例之间共享,对它的更改通过类本身或任何实例都会反映到其他实例上。

实例变量(Instance Variables): 实例变量是定义在方法(如__init__方法)内部的变量,它们通过self关键字前缀,并且每创建一个新的类实例时,每个实例变量都有自己的值和存储空间。实例变量是实例级别的,它们不会在不同的实例之间共享。

class MyClass:shared_var = '类变量'  # 类变量def __init__(self, value):self.instance_var = value  # 实例变量# 创建两个实例
obj1 = MyClass('实例变量1')
obj2 = MyClass('实例变量2')# 每个实例的实例变量都是唯一的
print(obj1.instance_var)  # 输出: 实例变量1
print(obj2.instance_var)  # 输出: 实例变量2# 类变量在实例之间共享
print(obj1.shared_var)  # 输出: 类变量
print(obj2.shared_var)  # 输出: 类变量

在这个例子中,每个实例obj1和obj2都有自己的instance_var实例变量,并且它们的值是独立的。但是,shared_var作为类变量,其值在两个实例之间是共享的。

🌟要点概括:

类变量

定义方法:类变量是在类的顶层定义的,即类的定义体中,但在任何方法之外。
作用域:类变量对类本身以及类的所有实例都是可见的。
共享性:类变量是共享的,这意味着所有实例都访问同一个变量。对类变量的任何修改都会反映到所有实例上。
使用场景:适用于存储应该在类的所有实例之间共享的数据,例如配置选项或该类的所有实例共用的数据。

实例变量

定义方法:实例变量是在类的方法中定义的,通常是在__init__方法中,通过self标识符引用。
作用域:实例变量对于类的每个实例来说都是唯一的,每个实例都拥有自己的变量副本。
共享性:实例变量不是共享的,每个实例的实例变量的更改不会影响到其他实例。
使用场景:适用于存储实例特定的数据,例如,一个对象的状态或属性,这些是对每个实例都是唯一的。

重要提醒

访问方式:尽管类变量可以通过实例来访问(例如self.class_var),但更改类变量的推荐方式是通过类名进行(例如MyClass.class_var = new_value)。
变量遮蔽:如果通过实例为类变量分配了一个值,这实际上会在该实例中创建一个同名的实例变量,从而“遮蔽”了类变量。这可能导致不直观的行为和难以发现的错误。
正确认识和区分这两种变量类型对于编写清晰、可维护和有效的Python代码至关重要。理解这些概念将帮助你更好地利用面向对象编程的优势,编写出既高效又易于理解的代码。

这篇关于Python类中变量定义详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

VSCode配置Anaconda Python环境的实现

《VSCode配置AnacondaPython环境的实现》VisualStudioCode中可以使用Anaconda环境进行Python开发,本文主要介绍了VSCode配置AnacondaPytho... 目录前言一、安装 Visual Studio Code 和 Anaconda二、创建或激活 conda

pytorch+torchvision+python版本对应及环境安装

《pytorch+torchvision+python版本对应及环境安装》本文主要介绍了pytorch+torchvision+python版本对应及环境安装,安装过程中需要注意Numpy版本的降级,... 目录一、版本对应二、安装命令(pip)1. 版本2. 安装全过程3. 命令相关解释参考文章一、版本对

SpringIoC与SpringDI详解

《SpringIoC与SpringDI详解》本文介绍了Spring框架中的IoC(控制反转)和DI(依赖注入)概念,以及如何在Spring中使用这些概念来管理对象和依赖关系,感兴趣的朋友一起看看吧... 目录一、IoC与DI1.1 IoC1.2 DI二、IoC与DI的使用三、IoC详解3.1 Bean的存储

Spring Cloud之注册中心Nacos的使用详解

《SpringCloud之注册中心Nacos的使用详解》本文介绍SpringCloudAlibaba中的Nacos组件,对比了Nacos与Eureka的区别,展示了如何在项目中引入SpringClo... 目录Naacos服务注册/服务发现引⼊Spring Cloud Alibaba依赖引入Naco编程s依

C语言中的浮点数存储详解

《C语言中的浮点数存储详解》:本文主要介绍C语言中的浮点数存储详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、首先明确一个概念2、接下来,讲解C语言中浮点型数存储的规则2.1、可以将上述公式分为两部分来看2.2、问:十进制小数0.5该如何存储?2.3 浮点

大数据spark3.5安装部署之local模式详解

《大数据spark3.5安装部署之local模式详解》本文介绍了如何在本地模式下安装和配置Spark,并展示了如何使用SparkShell进行基本的数据处理操作,同时,还介绍了如何通过Spark-su... 目录下载上传解压配置jdk解压配置环境变量启动查看交互操作命令行提交应用spark,一个数据处理框架

讯飞webapi语音识别接口调用示例代码(python)

《讯飞webapi语音识别接口调用示例代码(python)》:本文主要介绍如何使用Python3调用讯飞WebAPI语音识别接口,重点解决了在处理语音识别结果时判断是否为最后一帧的问题,通过运行代... 目录前言一、环境二、引入库三、代码实例四、运行结果五、总结前言基于python3 讯飞webAPI语音

基于Python开发PDF转PNG的可视化工具

《基于Python开发PDF转PNG的可视化工具》在数字文档处理领域,PDF到图像格式的转换是常见需求,本文介绍如何利用Python的PyMuPDF库和Tkinter框架开发一个带图形界面的PDF转P... 目录一、引言二、功能特性三、技术架构1. 技术栈组成2. 系统架构javascript设计3.效果图

MySQL中COALESCE函数示例详解

《MySQL中COALESCE函数示例详解》COALESCE是一个功能强大且常用的SQL函数,主要用来处理NULL值和实现灵活的值选择策略,能够使查询逻辑更清晰、简洁,:本文主要介绍MySQL中C... 目录语法示例1. 替换 NULL 值2. 用于字段默认值3. 多列优先级4. 结合聚合函数注意事项总结C

Java实现数据库图片上传功能详解

《Java实现数据库图片上传功能详解》这篇文章主要为大家详细介绍了如何使用Java实现数据库图片上传功能,包含从数据库拿图片传递前端渲染,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、数据库搭建&nbsChina编程p; 3、后端实现将图片存储进数据库4、后端实现从数据库取出图片给前端5、前端拿到