Python链式赋值执行顺序及执行方式的证明

本文深入探讨了Python中链式赋值的处理过程及顺序,通过实例验证了正确的赋值流程,并介绍了使用property函数定义属性的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在《关于Python链式赋值的赋值顺序问题》的评论中,博友“码哥yoo_____”提醒,上面博文内容的说法还是有问题,正取的说法应该是:
a=b=c=d
赋值处理过程如下:
temp = d
a = temp
b=temp
c=temp

老猿进行了验证,发现确实如期所说。具体证明方法如下:

class example:
     def __init__(self,name):
         self.name = name
         self.val = 0
         self.visitCount = 0
		    
     def getValue(self):
         self.visitCount += 1
         print("getValue exuted:",self.__repr__())
         return self.val
		
     def setValue(self,val):
      	 self.val = val
      	 print("setValue exuted:",self.__repr__())

     def __repr__(self):
         return f"objectName = {self.name},val = {self.val},visitCount={self.visitCount}"


     value = property(getValue,	setValue,None)

a = example("a")
b = example("b")
c=example("c")
d = example("d")
d.value = 10
a.value=b.value=c.value=d.value
执行截图:

在这里插入图片描述
可以看到执行链式赋值语句:a.value=b.value=c.value=d.value 时,先从d对象取值出来后,再也没有从其他对象取值,然后依次执行a、b、c的赋值。

没想到一个小小的链式赋值出了2次错,在此再次感谢两位热心的博友。

上述证明方法用到了《第7.23节 Python使用property函数定义属性简化属性访问的代码实现》和《第7.24节 Python案例详解:使用property函数定义属性简化属性访问代码实现》介绍的知识。不了解相关知识的请参考上述两文。

跟老猿学Python、学5G!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值