# -*- coding: utf-8 -*- #python 27 #xiaodeng #面向对象编程案例04--访问控制 #如果要让内部属性不被外部所访问,怎么做? #在属性的名称前加上两个下划线__即可,在python中,实例变量名下面如果加上__开头,就变成了一个私有变量private #只有内部可以访问,而外部不能去访问 #demo #01 class Student(): def __init__(self,name,age): self.__name=name self.__age=age def printAge(self): print '%s:%s'%(self.__name,self.__age) if __name__=="__main__": bart=Student('xiaodeng',28) #外部的代码不能随意修改对象内部的状态,这样通过访问限制的保护、代码更加健壮 #bart.__name #出现错误无法访问私有属性 bart.printAge() #02 #如果获得__name属性呢?给Student类新增getName和getAge方法 ##############修改上面的案例##################### print '--'*25 class Student(): def __init__(self,name,age): self.__name=name self.__age=age def printAge(self): print '%s:%s'%(self.__name,self.__age) #如果获得__name属性呢?给Student类新增getName和getAge方法 def getName(self):#getName return self.__name def getAge(self):#getAge return self.__age if __name__=="__main__": bart=Student('xiaodeng',28) print bart.getName() print bart.getAge() bart.printAge() #03 #如果要允许从外部代码中修改Age怎么办? ##############修改上面的案例##################### print '--'*25 class Student(): def __init__(self,name,age): self.__name=name self.__age=age def printAge(self): print '%s:%s'%(self.__name,self.__age) def getName(self): return self.__name def getAge(self): return self.__age #设置实例属性 def setAge(self,age):#setAge if 20<age<100: self.__age=age else: raise ValueError('error age') if __name__=="__main__": bart=Student('xiaodeng',28) bart.setAge(30) print bart.getAge() bart.printAge()