python零基础之基础语法迅速过(3)
关键字:类的私有属性、特殊属性、字典数据类型
今天在学习我们今天的字典数据类型之前,我们先来看一下在python中关于类的一个小知识点:类的私有属性。
学过java的同学都知道,在java中对于私有属性,是用一个专有的修饰符private来修饰,在python这个比较自由的语言中,对于私有属性的定义也相当自由,很简单在属性前+__,注意是两个下划线。
我们看下面一个例子
实例中我们定义了__sex为私有属性,我们发现通过me.__sex这种写法是无法获取到该属性的。我们都知道在java中要获取私有属性可以通过getter和setter方法对私有属性进行操作的,当然了在python中这也是可以的,但是还有一种更有趣的方式去获取私有属性(私有方法也是如此),如下
私有变量:实例._类名__变量名,私有方法也是如此
私有方法:实例._类名__方法名()
注意,类名._类名__变量名 也是可以获取私有属性的,但此时获取的属性属于类属性,举个栗子,
若是此时我们做个小小的改动,把大写的M换成小写的m如下
这其中区别我想大家一眼就能瞧出。
是的,此时我们不禁要问,为啥以这种方式我们可以访问到呢?
下面来学习python中另一个小知识点一个内置函数dir()和一个数据模型__dict__(也叫Special attributes,还有一些特殊属性,比如__doc__,__globals__等,之后我们会学到。详情看官网:3. Data model — Python 3.6.5 documentation)。
dir()函数描述:dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。
__dict__是用来存储对象属性的一个字典,其键为属性名,值为属性的值。
定义将就看一下,直接上代码可能更清晰,接着上面的例子
我们看到了我们熟悉的_类名__属性名,原来我们之所以能访问到python所谓的私有属性,是因为python内部已经将私有属性重新命名!
在例子中我们Me.__dict__返回的数据类型是python中非常经典的数据类型:字典。
其实字典就是java中的map(数据印射),由于比较简单,我们就用个例子简单看下
需要注意两点:
1dict内部存放的顺序和key放入的顺序是没有关系的。
2dict的key必须是不可变对象。