Python私有属性的坑

今天在群里聊天的时候有人发了一个问题,关于私有属性的,一开始也没看出什么问题后面才明白自己踩坑了,还是一些基础问题的坑,话不多说直接上代码吧

class Panda():
    def __init__(self,weight):
        self.__weight = weight

    @property
    def weight(self):
        return self.__weight

panda = Panda("100KG")
print(panda.weight)

panda.__weight=100
print(panda.__weight)

运行结果如下

100KG
100

按照我以前所学,私有属性是无法直接修改的,但是panda.__weight=100却成功修改了私有属性weight。

首先我们回顾一下私有属性,私有属性是由两个下划线开头的属性,python其实并没有私有属性,但是有伪私有化,我们的__weight属性经过Python解释器对外把__weight变成了__Panda_weight,所以我们无法直接访问,但是我们可以通过__Panda_weight来访问私有__weight,但是这样做会有一个风险,不同版本的python解释器会命名成不同的,所以尽量不要这样做。说了这么多,上面这个错误就是因为这个规律导致的,内部的__weight属性早已经经过Python解释器变成了__Panda_weight这个命名,而我们这个时候再使用panda.__weight,是新增了一个变量而已,已经不是之前的那个私有属性了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值