面向对象编程案例04--访问控制

# -*- 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()
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值