从品牌网站建设到网络营销策划,从策略到执行的一站式服务
如何在python中防止随意修改类的属性?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
如果不想允许随意修改一个类的某个属性,常用的方法是使用property装饰器以及在属性前加下划线。
class V: def __init__(self, x): self._x = x @property def x(self): return self._x
虽然这样是没法直接修改x了,但还是可以通过_x很轻易地修改x。
>>>v = V(5) >>>v.x 5 >>>v._x 5 >>>v.x = 4 Traceback (most recent call last): File "", line 1, in AttributeError: cant set attribute >>>v._x = 4 >>>v.x 4
万一哪天手抖了呢...
但如果使用双下划线——
class V: def __init__(self,x): self.__x = x @property def x(self): return self.__x
>>>v = V(5) >>>v.__x = 4 >>>v.__x 4 >>>v.x 5
原因在于python的名称改写特性(name mangling)。python会将以双下划线开头的实例属性名前加上一个下划线和类名存入实例的__dict__属性中。
>>>v = V(5) >>>v.__dict__ {'_V__x': 5} >>>v.__x = 4 >>>v.__dict__ {'_V__x': 5, '__x': 4}
当然,修改v.x的值还是可以做到的的,只需通过修改v._V__x就可以了,不过误操作的可能性已经降低很多了。
p.s.类也有__dict__属性。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联成都网站设计公司行业资讯频道,感谢您对创新互联成都网站设计公司的支持。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、网站设计器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
成都网站建设公司地址:成都市青羊区太升南路288号锦天国际A座10层 建设咨询028-86922220
成都快上网科技有限公司-四川网站建设设计公司 | 蜀ICP备19037934号 Copyright 2020,ALL Rights Reserved cdkjz.cn | 成都网站建设 | © Copyright 2020版权所有.
专家团队为您提供成都网站建设,成都网站设计,成都品牌网站设计,成都营销型网站制作等服务,成都建网站就找快上网! | 成都网站建设哪家好? | 网站建设地图