1、私有化
A、给一个类设置私有属性或方法,前面必须至少两个下划线,但一般很少有人写三个下划线
B、如果一个类的方法名前后各有两个下划线,说明是魔法方法
C、在一个py文件或者说模块里,一个变量或方法前面至少有一个下划线开头,说明这个变量或方法是模块内部的私有变量或方法。
在其他文件中导入该模块时要格外小心,如果你是通过 from thatModule import * 的方式想将那个模块的所有的变量或方法导入本文件中是做不到的,因为一个模块内的私有变量或方法是不支持 from thatModule import * 的方式。
但你可以直接导入那个模块,通过模块本身去获取它的私有变量或属性。
第一种导入方式
第二种导入方式
2、为什么一个类的属性变成私有属性后,就访问不到呢?
打印对象 t 的所有属性和方法,发现列表当中并没有一个叫 __num 的,却发现了一个很像的 _Test__num。
你之所以访问不到类的私有属性或方法,是因为python对它们进行了名字重整,重整后的名字变成 【_类名+私有属性或方法名】
知道私有属性或方法真正的名字后就能使用了,但不推荐这样做
3、property的使用
A、私有属性添加 getter 方法和 setter 方法
A的特点是,无论获取还是设置私有属性都要调用一个方法,我嫌这种方式太笨重
B、使用 property 升级 getter 和 setter 方法
someproperty = property(getter, setter)
之前获取和设置私有属性都要调方法,显得很笨重
使用property我们可以将对私有属性的获取和设置转换成对某个属性的取值和赋值操作
底层还是调用相应的getter和setter方法,但体力活交给python解释器了
t.num --> python 解释器知道调用 t.getNum
t.num = 200 ---> python 解释器知道调用 t.setNum
C、使用property取代getter和setter方法
4、迭代器