私有属性指的是这个属性只能在对象内部被调用,在当前对象的往外面调用就会抛出异常。这里的当前对象可以是类实例,也可以是模块对象。
Python定义私有属性的方式很简单,只需要在定义变量,方法时在名称前加上单下划线或者双下划线即可。具体可分为以下几种情况。
1. _name——对象和子类可以访问,但不可以导入。
2. __name——双下划线开头的为私有属性,对象和子类也不能访问。
3. __name__——前面双下划线,一般为系统预定义的私有属性。
下面请看案例
从示例的调用结果可以看出,单下划线开头的私有属性与普通属性的使用方式没有区别,因为单下划线开头的私有属性主要限制import语句的导入;而双下划线开头的私有属性则不能直接访问,只能通过内部方法间接访问。
Python中的双下划线方法之所以不能被直接访问,是因为Python解释器会自动修改双下划线开头的方法名称,修改后的名称格式为:_[类名][原私有成员名称]。例如上面的__name属性,实际上会被修改为_Person__name。具体可以使用__dir__来查看对象具有的属性。如果非要直接访问该私有属性,可以直接访问修改过后的属性名称。