成员变量可见性

双下划线

python 中没有关键字标识变量是否对外部可见,而是在变量或方法前面添加两个下划线,标识该变量或方法只能在内部访问或修改,外部不能访问或修改。

  1. self.__score = score

一般这种情况,如果要访问这个 score 变量,我们有两种选择。
一种是在类的内部定义一个对外可见的方法,返回该变量。
另一种方法是通过 对象名._类名__score 才能访问该变量。

__xx__ 这是特殊变量,属于内置的属性。特殊变量可以从外部直接访问。

  1. class Student():
  2. sum = 0
  3. def __init__(self, name, age):
  4. self.name = name
  5. self.age = age
  6. def marking(self, score):
  7. self.__score = score
  8. student = Student("哎哟", 16)
  9. student.marking(59)
  10. print(student._Student__score)
  11. print(student.__dict__)

结果:

  1. 59
  2. {'name': '哎哟', 'age': 16, '_Student__score': 59}

__score 变量动态添加到对象时,默认地转换成了 _Student__score,这一点非常值得注意。

单下划线

大多数 python 程序员会遵循一种命名规范,让以下划线开头的变量表示是受保护的。
本类以外的代码在访问这样的属性时应该保持慎重。
这种做法并不是语法上的规则,单下划线开头的变量,外界依然能够访问,所以更多时候它只是一个提示作用。