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

在《关于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!

posted @ 2020-05-02 16:07  老猿学Python  阅读(266)  评论(0编辑  收藏  举报