Python 方法中变量加self和不加的区别

在python当中,类内定义的属性,有self和没有self有什么区别? 类变量:不使用self,直接定义在类体中,属于类本身,被所有实例共享。实例变量:通过self在类的方法中定义和访问,属于类的实例,每个实例都有自己的独立副本。 阅读详情

这段代码我觉得很好的说明了python中类的方法在加self和不加self的区别。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
>>> class AAA(object):
...     def go(self):
...         self.one = 'hello'
...
>>> class BBB(object):
...     def go(self):
...         one = 'hello'
...
>>> a1 = AAA()
>>> a1.go()
>>> a1.one
'hello'
>>> a2 = AAA()
>>> a2.one
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'AAA' object has no attribute 'one'
>>> a2.go()
>>> a2.one
'hello'
>>> b1 = BBB()
>>> b1.go()
>>> b1.one
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'BBB' object has no attribute 'one'
>>> BBB.one
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'BBB' has no attribute 'one'
>>> class BBB(object):
...     def go(self):
...         one = 'hello'
...         print one
...         self.another = one
...
>>> b2 = BBB()
>>> b2.go()
hello
>>> b2.another
'hello'
>>> b2.one
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'BBB' object has no attribute 'one'

个人认为方法中加self的变量可以看成是类的属性,或者是特性。使用方法改变和调用属性,属性改变实例的状态。方法中不加self的变量可以看成一个局部变量,该变量不能被直接引用。


类本身的局部变量(个人的认为定义在方法以外不以self开头的变量是类本身的局部变量)是可以被直接掉用的,注意这里不是指上面所说的方法内的局部变量(这两个命名空间不同)。如果方法中有有变量与类的局部变量同名,那么方法中的局部变量将会屏蔽类中的局部变量即类中的局部变量不在起作用。



Python中self用法详解 Python中类、实例以及self的详解 阅读详情

相关推荐

ArcGIS符号库下载 | 制图规范、三调、1:1万地形图、土地利用总体规划图.....

最近整理了一些符号库 涉及的类型比较多 包含有三调的(二调的也加上去了),一些点线面符号库,1:1万地形图,1:5万土地利用,土地利用总体规划图

qq_43173805的博客 2万+

python定义类时加self和不加self的区别?

1.self只有在类的方法中才会有,其他函数或方法是不必带self的。 2.在调用时不必传入相应的参数。 3.在类的方法中(如__init__),第一参数永远是self,表示创建的类实例本身,而不是类本身。 4.可以把对象的各种属性绑定到self。 5.self代表当前对象的地址。self能避免非限定调用造成的全局变量。 6.self不是python的关键字,也可以用其他名称命名,但是为了规范和便于读者理解,推荐使用self。 python中的self等价于C++中的self指针和Java、C#中的this

Dontla的博客 1万+

LauterBach使用教程

(也就是服务器上编译时候的路径一模一样的路径,选中到工程目录就可以)4.选择自己板子对应的cpu(可以直接界面选择也可以命令行的方式)(cpu里的system setting),我们板子需要sys复位,所以选择sys。注:一般情况下运行状态不可以修改外设寄存器的值,但是可以通过修改配置来修改为运行时可修改(cpu寄存器则不可以)(修改这个配置,运行时也可以查看代码)注意:lauterbach可以使用命令来操作,但是由于本人刚刚使用,目前基本上使用的都是界面的按钮,以后会陆续学习命令行指令和脚本的方式。

wacebb的博客 1万+

python类中变量加self和不加的区别

转载 如果不加self,表示是类的一个属性(可以通过“类名.变量名”的方式引用),加了表示是类的实例的一个属性(可以通过“实例名.变量名”的方式引用)。 比如: `In [17]: class Test(object): …: val = 1 …: …: def init(self): …: self.val = 2 …: …: In [18]: test = Test() In [19]: test.val Out[19]: 2 In [20]: Test.val Out[

ystzdhbc的博客 2825

Mamba再封神!与YOLO结合,拿下二区!好发不卷!

相比传统的YOLO改进,Mamba是新技术,两者结合尚在蓝海阶段,可发挥空间大!更为关键的是,它在检测精度和速度方面,都让以往的YOLO模型难以望其项背!比如代表模型Mamba YOLO,便在参数减少45.5%、FLOPs减少50%的同时,精度还比YOLOv8高6.1%!这主要得益于,Mamba能够捕捉长期依赖关系,而YOLO则擅长捕捉局部特征,两者能够优势互补,且Mamba线性复杂度的特性,也有利于提高计算效率!为了让大家能够紧跟前沿发展,找到更多灵感启发,我给大家10种。

2401_88190197的博客 2506

运放+三极管恒流源电路设计实战:从原理到仿真一步到位(附Multisim文件)

本文详细解析了运放与三极管构建恒流源电路的核心原理,重点阐述了负反馈机制如何实现精准的电流控制。通过Multisim仿真实战,从电路搭建、参数计算到负载调整率与动态响应分析,一步步指导设计过程,并提供常见故障的调试技巧与PCB设计要点,帮助工程师从理论平稳过渡到可靠实践。

7z8x2c4v6b9的博客 709

Python : 类定义中,不加self.和加self.的区别【关于局部变量和全局变量的使用详解】

先上代码,毕竟无代码言吊 &gt;&gt;&gt; class k():     c = 6     def __init__(self):         self.c=1 &gt;&gt;&gt; k.c 6 &gt;&gt;&gt; mk = k() &gt;&gt;&gt; mk.c 1 差别就在这个地方,第一个C实例是无法调用的,是类中的局部变量,只有父类可以调用,而且,单独输入C...

lcqin111的博客 1万+

FPGA实现的AES加解密算法——Verilog源代码详解

本文将介绍基于FPGA的AES加解密算法的Verilog实现,并提供相应的源代码。根据密钥长度的不同,AES算法分为AES-128、AES-192和AES-256三种模式。对于已知的明文-密钥组合,可以使用在线的AES加解密工具计算出正确的密文,然后将该密文与FPGA加速器的输出进行比较。本文以AES-128算法为例,介绍基于FPGA的AES加解密算法的设计思路和Verilog实现。以上是基于FPGA的AES加解密算法的Verilog实现的相关内容。模块接受输入的明文和密钥,并输出加密后的密文。

HackSquad的博客 1975

Python里边的self到底是什么?什么时候加self?什么时候不加?

所以self到底加不加。

kami_ochin_akane的博客 1万+

扫地机器人设计与实现——基于嵌入式系统的智能家居解决方案

本文介绍了基于嵌入式技术的扫地机器人设计与实现。通过利用STM32单片机、传感器、驱动系统等硬件组件,并结合路径规划与控制算法、远程控制等软件技术,设计出了一款具有智能避障、路径规划、自动充电等功能的扫地机器人。系统的开发不仅提高了清洁效率,也为进一步研究和优化扫地机器人提供了实践基础。

2201_76125393的博客 1638

YOLOv8独家原创改进:SPPF原创自研创新 | SPPF创新结构,重新设计全局平均池化层和全局最大池化层,增强全局视角信息和不同尺度大小的特征

SPPF_improve利用全局平均池化层和全局最大池化层,加入一些全局背景信息和边缘信息,从而获取全局视角信息并减轻不同尺度大小所带来的影响

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 4683

python属性前为何要加self_python中类的方法里面变量前加self与不加self的区别

1.最近在执行一个UI自动化脚本登录网站时遇到一个很奇葩的问题:运行脚本后chromedriver会驱动浏览器打开网站执行脚本里面的一系列界面操作,操作完后浏览器自动关闭了(重点就在这里,我明明没有调用webdriver的close()或是quite()方法,为什么它就自动关闭了呢,之前写过一系列的脚本也没出现这个问题,很是纳闷)2.在网上搜了下相关问题的贴子,很多说是因为谷歌浏览器的版本与chr...

weixin_39526706的博客 633

用「OpenClaw」打造新媒体运营神器:小红书/公众号全自动选题→创作→排版→发布全流程

对于新媒体运营的从业者来说,AI不是要取代运营人员,而是把他们从繁琐的重复劳动中解放出来,专注于更核心的内容策略、用户运营、品牌建设,这才是AI在传统行业落地的真正价值。这是最终输出可发布内容的核心智能体,我们通过「OpenClaw」的Prompt工程,结合不同平台的排版规范,实现了一键生成符合要求的排版,完全替代人工重复劳动。这套系统的落地,不是技术的炫技,而是真正用AI解决了新媒体运营的核心痛点:用自动化替代重复的人工劳动,用数据决策替代经验主义,用全闭环执行替代纸上谈兵的建议。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 198

python中类的方法里面变量前加self与不加self的区别

1.最近在执行一个UI自动化脚本登录网站时遇到一个很奇葩的问题:运行脚本后chromedriver会驱动浏览器打开网站执行脚本里面的一系列界面操作,操作完后浏览器自动关闭了(重点就在这里,我明明没有调用webdriver的close()或是quite()方法,为什么它就自动关闭了呢,之前写过一系列的脚本也没出现这个问题,很是纳闷) 2.在网上搜了下相关问题的贴子,很多说是因为谷歌浏览器的版本与ch...

weixin_33830216的博客 2725

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Python 类中方法的内部变量,命名加'self.'变成 self.xxx 和不加直接 xxx 的区别

如果不加self,表示是类的一个属性(可以通过“类名.变量名”的方式引用),加了表示是类的实例的一个属性(可以通过“实例名.变量名”的方式引用)。 比如: In[17]:classTest(object): ....:val=1 ....: ....:def__init__(self): ....:self.val=2 ...

abcx3261的博客 1229

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Python 类中方法的内部变量,命名加'self.'变成 self.xxx 和不加直接 xxx 的区别 ---学习记录

转载至:https://blog.youkuaiyun.com/jojoy_tester/article/details/54016309先看两个类的方法:[python] view plain copy&gt;&gt;&gt; class nc():      def __init__(self):          self.name ='tester'  #name变量加self           &...

hey_man2017的博客 5987

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

python class类的self_Python类class参数self原理解析

1.self只有在类的方法中才会有,其他函数或方法是不必带self的。2.在调用时不必传入相应的参数。3.在类的方法中(如__init__),第一参数永远是self,表示创建的类实例本身,而不是类本身。4.可以把对象的各种属性绑定到self。5.self代表当前对象的地址。self能避免非限定调用造成的全局变量。6.self不是python的关键字,也可以用其他名称命名,但是为了规范和便于读者理解...

weixin_34938347的博客 353

python属性前为何要加self_python什么时候加self,什么时候不加self

1、self是什么,一般都说指对象本身,这样说了没了用,说了后还是很难懂,因为这样说了后,仍然完全搞不清楚,什么时候变量前需要加self,什么时候不需要加self。造成很多人,已经怕了self,不停地测试,加self减self来测试代码,或者干脆不知道要不要self,所有变量前面一律加self,这样就能瞎猫碰死老鼠了,但不弄清楚,长期这样做法有点悲剧。2、所以不需要这么去想self代表对象本身,换...

weixin_39747075的博客 2952

Python中self的解释

定义 首先我们要搞明白Python的类中为要什么要用到self这个单词呢,为什么不用&amp;quot;zhangsan&amp;quot;、&amp;quot;lisi&amp;quot;这样的名字呢,这可定有他的用意。查Google翻译解释: self 名词的解释:自;自我;自己 那么问题来了,这里的自己指代的到底是谁,下面听我详细分解。(仅属于自己的见解,有不对的地方,还望不吝赐教) 分析 测试代码以一下这个代码及其它的扩充为基础,先贴代码,为了好理解,别说...

梅花14的博客 5万+

python类什么时候加self_python什么时候加self,什么时候不加self

1、self是什么,一般都说指对象本身,这样说了没了用,说了后还是很难懂,因为这样说了后,仍然完全搞不清楚,什么时候变量前需要加self,什么时候不需要加self。造成很多人,已经怕了self,不停地测试,加self减self来测试代码,或者干脆不知道要不要self,所有变量前面一律加self,这样就能瞎猫碰死老鼠了,但不弄清楚,长期这样做法有点悲剧。2、所以不需要这么去想self代表对象本身,换...

weixin_39803207的博客 1972

Python中变量前面加不加self的区别

class animal(): def __init__(self): self.a = 5 class human(): def __init__(self): a = 123 if __name__ == '__main__': animal = animal() print(animal.a) human = human()...

LuckyMeizai的博客 3697

Python类或方法中的变量什么时候加self,及self.变量调用方法

一.思考是否需要在该方法(def函数)之外继续使用到该变量 若需要再次调用,则加self,这样就相当于在类内的"全局变量 二.若需要了,则注意其使用方法 Eg1: 变量有self情况如何调用 >>> class MM(object): def mm(self): self.one = 'hello' // 开始调用 >>> m1 = MM() >>> m1.mm() >>> mm.one 'hello'

weixin_38779971的博客 6056
上一篇: div、p、td 的强制不换行及强制换行
下一篇: 发射性按钮
SmallTankPy
博客等级 码龄10年 26粉丝 15原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值