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类中变量定义详解
✨前言: Python中的类可以定义两种类型的变量:类变量和实例变量。 类变量(Class Variables): 类变量是在类级别上定义的变量,它们是对所有实例共享的。这意味着类变量只有一个副本,无论你创建了…...
c++ extern 关键字详解
extern关键字在C中用于声明变量或函数的外部链接。它通常用于以下几种场景: 声明全局变量:在一个文件中定义变量,在其他文件中使用extern声明该变量,以便在多个文件之间共享。C和C混合编程:在C代码中引用C语言编写的函…...

计算机网络:运输层 - TCP 流量控制 拥塞控制
计算机网络:运输层 - TCP 流量控制 & 拥塞控制 滑动窗口流量控制拥塞控制慢开始算法拥塞避免算法快重传算法快恢复算法 滑动窗口 如图所示: 在TCP首部中有一个窗口字段,该字段就基于滑动窗口来辅助流量控制和拥塞控制。所以我们先讲解滑…...

Python学习打卡:day10
day10 笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了 目录 day1073、文件的读取操作文件的操作步骤open()打开函数mode常用的三种基础访问模式读操作相关方法read()方法readlines()方法readline()方法for循…...

新书速览|Ubuntu Linux运维从零开始学
《Ubuntu Linux运维从零开始学》 本书内容 Ubuntu Linux是目前最流行的Linux操作系统之一。Ubuntu的目标在于为一般用户提供一个最新的、相当稳定的、主要由自由软件构建而成的操作系统。Ubuntu具有庞大的社区力量,用户可以方便地从社区获得帮助。《Ubuntu Linux运…...

[Qt的学习日常]--窗口
前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、窗口的分…...

Vue发送http请求
1.创建项目 创建一个新的 Vue 2 项目非常简单。在终端中,进入您希望创建项目的目录(我的目录是D:\vue),并运行以下命令: vue create vue_test 2.切换到项目目录,运行项目 运行成功后,你将会看到以下的编译成功的提示…...

学习使用js和jquery修改css路径,实现html页面主题切换功能
学习使用js和jquery修改css路径,实现html页面主题切换功能 效果图html代码js切换css关键代码jquery切换css关键代码 效果图 html代码 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>修改css路径</title&g…...
(转)请介绍一下Redis的数据淘汰策略
1. **NoEviction(不淘汰)**:当内存不足时,直接返回错误,不淘汰任何数据。该策略适用于禁止数据淘汰的场景,但需要保证内存足够。 2. **AllKeysLFU(最少使用次数淘汰)**:…...

APP自动化测试-Appium常见操作之详讲
一、基本操作 1、点击操作 示例:element.click() 针对元素进行点击操作 2、初始化:输入中文的处理 说明:如果连接的是虚拟机(真机无需加这两个参数,加上可能会影响手工输入),在初始化配置中…...

写给大数据开发:谈谈数仓建模的反三范式
在数仓建设中,我们经常谈论反三范式。顾名思义,反范式化指的是通过增加冗余或重复的数据来提高数据库的读性能。简单来说,就是浪费存储空间,节省查询时间。用行话讲,这就是以空间换时间。听起来像是用大炮打蚊子&#…...

Stable diffusion 3 正式开源
6月12日晚,著名开源大模型平台Stability AI正式开源了,文生图片模型Stable Diffusion 3 Medium(以下简称“SD3-M”)权重。 SD3-M有20亿参数,平均生成图片时间在2—10秒左右推理效率非常高,同时对硬件的需求…...

如何配置node.js环境
文章目录 step1. 下载node.js安装包step2. 创建node_global, node_cache文件夹step3.配置node环境变量step3. cmd窗口检查安装的node和npm版本号step4. 设置缓存路径\全局安装路径\下载镜像step5. 测试配置的nodejs环境 step1. 下载node.js安装包 下载地址:node.js…...
python tensorflow 各种神经元
感知机神经元(Perceptron Neuron): 最基本的人工神经元模型,用于线性分类任务。 import numpy as npclass Perceptron:def __init__(self, input_size, learning_rate0.01, epochs1000):self.weights np.zeros(input_size 1) #…...
Gone框架介绍27 - 再讲 Goner 和 依赖注入
gone是可以高效开发Web服务的Golang依赖注入框架 github地址:https://github.com/gone-io/gone 文档地址:https://goner.fun/zh/ 文章目录 Goner 和 依赖注入Goner的定义依赖标记Goners 注册Priest函数 Goner 和 依赖注入 Gone 作为一个依赖注入框架&am…...

【Python/Pytorch 】-- 滑动窗口算法
文章目录 文章目录 00 写在前面01 基于Python版本的滑动窗口代码02 算法效果 00 写在前面 写这个算法原因是:训练了一个时序网络,该网络模型的时序维度为32,而测试数据的时序维度为90。因此需要采用滑动窗口的方法,生成一系列32…...
Clickhouse集群create drop database可删除集群数据库或只删除本地数据库
集群环境下,在任意一个节点创建数据库,如果加上了ON CLUSTER clustername,则在集群环境的所有节点上都创建了该数据库,并在集群环境的所有节点上都创建了该数据库对应的目录,且数据库的metadata_path对应的目录路径在所…...

【docker】adoptopenjdk/openjdk8-openj9:alpine-slim了解
adoptopenjdk/openjdk8-openj9:alpine-slim 是一个 Docker 镜像的标签,它指的是一个特定的软件包,用于在容器化环境中运行 Java 应用程序。 镜像相关的网站和资源: AdoptOpenJDK 官方网站 - AdoptOpenJDK 这是 AdoptOpenJDK 项目的官方网站&…...
Vscode interaction window
python 代码关联到 jupyter 模式 在代码前添加: # %%print("hellow wolrd!") 参考文档链接: https://code.visualstudio.com/docs/python/jupyter-support-py...

后端数据null前端统一显示成空
handleNullValues方法在封装请求接口返回数据时统一处理 // null 转 function handleNullValues(data) {// 使用递归处理多层嵌套的对象或数组function processItem(item) {if (Array.isArray(item)) {return item.map(processItem);} else if (typeof item object &&…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...

性能优化中,多面体模型基本原理
1)多面体编译技术是一种基于多面体模型的程序分析和优化技术,它将程序 中的语句实例、访问关系、依赖关系和调度等信息映射到多维空间中的几何对 象,通过对这些几何对象进行几何操作和线性代数计算来进行程序的分析和优 化。 其中࿰…...
LeetCode 0386.字典序排数:细心总结条件
【LetMeFly】386.字典序排数:细心总结条件 力扣题目链接:https://leetcode.cn/problems/lexicographical-numbers/ 给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。…...