python内置类属性_python的类访问控制

原标题:python的类访问控制

在python类中,有属性和方法,外部代码可以直接通过实例来访问修改。

如果需要让内部的属性不被外部访问到,在属性变量前面加上__2个下划线。

在python中,实例的变量名如果是由__2个下花钱开头的,就代表这是一个私有变量:只有内部可以访问,外部不许直接通过类或者实例访问。

代码:

9a92173ad9e243ae9bc9b401eb2d4b53.png

虽然说外部访问不了一个内部私有属性,但是可以通过类中方法间接的访问、修改

类内部方法getname和setname:

69157595905d441c9b01e102fc821eb8.png

双下划线开头的私有属性,是不是一定不能从外部访问呢?

其实不是的:

b34da01cb09f4fda99af0ea9ab098df7.png

python中2个有趣的现象,外部变量遮蔽类中的变量。

从实例中访问类属性必须要谨慎。

和通常python变量一样,任何对实例属性的赋值都会创建一个实例属性(如果实例属性不存在的话),并且对其赋值。

但是,如果类属性中存在同名的属性,就是产生前面所说的有趣的副作用。

python3.x依旧存在这个情况。

下面上代码:

652d720730ce4f36b03806100b05690a.png

c7b7bc35ae9b4f919a4a90c077f51c86.png

为什么下面的dict类型的就会del报错呢??

原因在于:

python是由c写成的cpython。

c语言中,并没有字符串这个概念:c中叫做字符数组,存储在内存中,是一块连续的空间,不可修改,任何修改字符数组的行为,都会在不影响原始的字符数组下,创建产生一个新的字符数组。

而dict就不一样了,它在内存中存储,是一系列非连续的内存空间,可以在原来的基础上修改,所以,第二个例子中del f.x就会报错。

*声明:推送内容及图片来源于网络,部分内容会有所改动,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值