python的类访问控制

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

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

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

代码:

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

类内部方法getname和setname:

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

其实不是的:

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

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

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

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

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

下面上代码:

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

原因在于: python是由c写成的cpython。

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

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

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2017-03-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏老九学堂

最新Java高薪面试题+答案+解析!

今天老九君给大家分享一些Java面试需要的题目哟~ 01 anonymousinnerclass(匿名内部类)是否可以extends(继承)其它类,是否可以im...

46270
来自专栏blackheart的专栏

[C#2] 1-泛型

1. 泛型概述 泛型是一种类型的多态;比如当我们写一个栈或者队列的时候,需要指定其数据类型,int一份代码,string一份代码,object的一份代码, 这些...

234100
来自专栏老马说编程

计算机程序的思维逻辑 (13) - 类

类 程序主要就是数据以及对数据的操作,为方便理解和操作,高级语言使用数据类型这个概念,不同的数据类型有不同的特征和操作,Java定义了八种基本数据类型,其中,...

192100
来自专栏用户2442861的专栏

JS面向对象的程序设计

http://www.cnblogs.com/gaojun/p/3386552.html

9810
来自专栏IMWeb前端团队

标准的Promise

序言 不同项目下lib里的promise/deferred往往是差异化最多的,用起来和自己的习惯相比经常是缺胳膊少腿多屁眼有卵用,因此聊聊标准的Promise的...

20650
来自专栏C语言及其他语言

【编程经验】表达式和语句及选择结构

在C中,表达式代表值,而语句代表给计算机的指令。 表达式 表达式由运算符和操作数组成。最简单的表达式只是一个不带运算符的常量或者变量,例如12或者num。...

10020
来自专栏从流域到海域

《笨办法学Python》 第6课手记

《笨办法学Python》 第6课手记 第6课讲字符串和文本,作者给出的代码如下: x = "There are %d types of people." % 1...

20350
来自专栏IT可乐

Java关键字(三)——static

  我们说Java是一种面向对象编程的语言,而对象是把数据及对数据的操作方法放在一起,作为一个相互依存的整体,对同类对象抽象出其共性,便是Java中的类,我们可...

7920
来自专栏大闲人柴毛毛

稳扎稳打JS——自由变量

自由变量的作用域在程序运行前就已经确定! 自由变量相当于Java中的全局变量,它在外层作用域中声明,但在内层作用域中使用,如下所示: var a = 1; f...

37470
来自专栏数据处理

python命名中下划线的含义

19520

扫码关注云+社区

领取腾讯云代金券