成员的可见性

为了提高封装性和安全性,需要根据实际情况对类的成员的可见性进行约束

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

标签: none

分享到: