通过用户名和密码的设置对封装进行学习的笔记

通过代码加深python上对于封装的理解,原本对于用户名和密码的设置,如果不做限制,容易出现问题,通过封装来对初试密码设置以及后续的变量修改和使用做出判断以及限制。

对内容进行保护,防止细节被破坏。

双下划线的成员名是要隐藏的,不能做调用。


class User:
    def __init__(self, name='Noname', passwd='default'):
        #此处两个实例变量以__开头,因此它会被隐藏
        if isinstance(name,str) and 4 <= len(name) <= 8:   #不仅对长度作出要求,也要求密码必须是字符串
            self.__name = name
        else:
            self.__name = 'Noname'
        if isinstance(name, str) and 6 <= len(passwd) <= 12:
            self.__passwd = passwd
        else:
            self.passwd='default'

    def getname(self):
        return self.__name
    def setname(self, name):
        #封装的意义在于:当程序通过setter对实例变量赋值时,程序会对所赋值进行检查,避免无效值,程序可保证对象的完整性
        if isinstance(name,str) and 4 <= len(name) <= 8:  #要求姓名也必须是字符串
            self.__name = name
        else:
            print('无效的用户名')

    name=property(fget=getname,fset=setname)

    def getpasswd(self):
        return self.__passwd
    def setpasswd(self, passwd):  
        if isinstance(passwd,str) and 6 <= len(passwd) <= 12:   #不仅对长度作出要求,也要求密码必须是字符串
            self.__passwd = passwd
        else:
            print('无效的密码')
    passwd = property(fget=getpasswd, fset=setpasswd)
    
u = User()
#如果没有封装机制,u.name可以被赋值为任意内容。当使用封装之后,u.name只能设置为4-8位的字符串。
u.name = 'fk'  #无效的用户名
print(u.name)
u.name = 'asdfj'
print(u.name)
        

python会偷偷地改变双下划线成员名,会在前面添加一个单下划线和类名,可以通过这种方式来达到调用的目的(虽然不建议这样做)。

class Item:
    def __init__(self):
        #被隐藏的__name变量
    	self.__name = '电子产品'

im = Item()
print(im.__name)  #被隐藏,代码就会出错

这个时候对于__name是访问不到的,会提示错误。
代码修改成:

class Item:
    def __init__(self):
        #被隐藏的__name变量
        self.__name = '电子产品'

im = Item()
# print(im.__name)
print(im._Item__name)

结果展示
此时就可以访问到了,这就是python修改的成员名,前面增加了 _类名。python并没有真正的隐藏机制,所有成员默认都是公开的。

《疯狂python》学习笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值