老师 打印key的时候不理解

老师 打印key的时候不理解

key=‘{}.{}’.format(self.__attr,key)
为什么打印出来的结果不是
{}.{a}
{a}.{a.b}
{a.b}.{a.b.c}

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕凡 2021-11-05 13:21:46

同学,你好!

一、"{ }".format( )为格式化输出,并不会在控制台中输出大括号,如下图:

https://img1.sycdn.imooc.com//climg/6184be4d0924e4ee05300212.jpg

二、当执行t2.a.b.c时,key的值是这样变化的:key=a,key=a.b,key=a.b.c,代码具体流程如下:

(1)当t2.a运行时,self.__attr的值为空字符串,在判断时为False,执行的就是else中的代码,输出的结果是a,继续执行return语句,调用Test2,并传入key的值;

(2)当t2.a.b运行时,先执行def __getattr__(self,key):方法,此时__attr是a,if判断条件成立,此时的key=“a.b”输出的结果是"a.b",继续执行return语句,调用Test2,并传入key的值;

(3)当t2.a.b.c运行时,先执行def __getattr__(self,key):方法,此时__attr是a.b,if判断条件成立,此时的key=“a.b.c”,输出的结果是"a.b.c";

(4)建议同学在代码中添加以下输出提示,可以更好的理解

http://img1.sycdn.imooc.com//climg/60f63b8609f7f5c106460746.jpg

祝学习愉快!

  • 提问者 慕妹6490684 #1
    老师 key=‘{}.{}’.format(self.__attr,key) 当key=a.b __attr=a时 print(key)的结果为什么不是 a.a.b
    2021-11-05 13:39:52
  • 好帮手慕凡 回复 提问者 慕妹6490684 #2

    同学,你好!

    因为return Test2(key)将key=a.b 作为实参传入test2( )类中的初始化函数__init__中,此时attr=key就为attr=a.b,因为c不存在,所以__getattr__(key)中的key就为c,此时:key=‘{}.{}’.format(self.__attr,key)就等于key=‘{a.b}.{c}’,如下图:

    https://img1.sycdn.imooc.com//climg/6184c6d5095d9a2907370638.jpg

    祝学习愉快~


    2021-11-05 13:56:06
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师