Python学习
7.6 成员可见性:公开和私有
成员可以理解为变量和方法。
(1).编程提倡的规范:
一般来说,我们想修改一些类的特征的值,不应该通过直接访问的方式来改变变量的值;正确的方式应该为,对于所有类下面变量的更改应该通过方法来完成。
(2).成员包括:
公开成员(public):在类的外部可以对它直接赋值或读取。
私有成员(private):在类的外部无法对它赋值或读取。
在Python中,对于一个变量或者方法,名字前面没有双下划线“__”则认为是公开的;如果前面加上双下划线则认为是私有的。一个小秘密:如果前后都有双下划线,则又变成公开的,如构造函数。也不建议定义方法或变量名时,用前后双下划线,这是为了和Python内置的区别开。
(3).观察下面一个有趣的现象:
class Student():
sum1 = 0
def __init__(self, name, age):
self.name = name
self.age = age
self.__score = 0
student1 = Student('石敢当', 18)
student1.__score = -1
print(student1.__score)
运行结果:
_score是私有的变量,为什么在外部可以修改它并且可以打印出来呢?
原来这是由于Python语言的动态性,在类的外部通过点操作符重新建立了一个__score变量,我们可以通过调用__dict__变量来查看,加入以下一行代码:
print(student1.__dict__)
输出结果:
可见由于Python语言的动态性,在类的外部通过点操作符重新建立了一个__score变量。并且原有的私有变量被Python改名为_Student__score,所以不能通过__score再来访问,故为私有。但是我们可以猜想,能不能通过_Student__score名来访问私有变量呢?答案是可以的,但是不建议这样做,因为我们要尊重私有变量。