python面向对象:成员可见性
成员的可见性
为了提高封装性和安全性,需要根据实际情况对类的成员的可见性进行约束
class Test():
def __init__(self,name='张三',course='英语'):
self.name = name
self.course = course
self.score = 0
def marking(self):
print(self.name + '的' + self.course + '成绩为' + str(self.score))
s = Test(name='那谁')
s.score = 20 # score可以被外部调用并更改
s.marking()
定义私有变量和方法
为了提高安全性,变量score
需要设置为私有,禁止外部调用,设置私有变量和方法的可见性方法如下:
在名称前使用__
即可声明一个私有变量或者方法。
class Test():
def __init__(self,name='张三',course='英语'):
self.name = name
self.course = course
self.__score = 0 #设置为私有
def __marking(self):
print(self.name + '的' + self.course + '成绩为' + str(self.__score))
def showScore(self):
print(self.__score)
s = Test(name='那谁')
print(s.__score) #无法访问
s.showScore()
可访问性
python通过修改变量名称实现属性和方法的私有性:
class Test():
def __init__(self,name='张三',course='英语'):
self.name = name
self.course = course
self.__score = 0
def __marking(self):
print(self.name + '的' + self.course + '成绩为' + str(self.__score))
def showScore(self):
print(self.__score)
s = Test(name='那谁')
s.__score = -1 # 新增了一个名为__score的变量,和s.score 不同
print(s.__dict__)
# {'name': '那谁', 'course': '英语', '_Test__score': 0, '__score': -1}
print(s._Test__score) # 魔术方法,强制访问私有变量 score