为什么我在实例中修改了私有属性,程序不但没报错,还能执行打印出来?

为什么我在实例中修改了私有属性,程序不但没报错,还能执行打印出来?

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

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

2回答
好帮手慕燕燕 2021-04-16 13:47:56

同学,你好!

1、cat.__cat_type = "dog",其实是定义了一个实例属性,实例属性的值是"dog",并没有改变类中的私有属性,通过打印cat._Cat__cat_type可以看到类中的__cat_type值仍然是"cat"

http://img1.sycdn.imooc.com//climg/6079237209cdb66406720544.jpg

2、将cat.__cat_type = "dog"注释掉,实例属性不存在,打印就会报错

祝:学习愉快!

嚯嚯嚯霍哼 提问者 2021-04-15 23:11:04

补充疑问,就是当我注释掉下面那串代码后,程序就会正常报错 这时为什么呢?


http://img1.sycdn.imooc.com//climg/6078577a0931ae3012160528.jpg

  • 都说是私有属性了呀,个人财产不会倍实例继承呀,除非你给实例的私有属性也赋值,否则就报错了呀

    class test(object):
    __test1 = 0
       test2 = 1

    test_1 = test()
    #test_1.__test1 = 1 实例的私有属性定义
    print(test_1.__test1) # 上面不定义就无法获取实例的私有属性,将报错
    print(test_1.test2) # 非私有属性继承类的值


    2021-04-22 11:04:44
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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