2.25python属性和方法私有化
#保护对象的属性
#如果有一个对象,当需要对 其进行修改属性时, 有2种方法
# 对象名 属性名 = 数据——— >直接修改
# 对象名 方法名()——————>间接修改
#为了更好的保存属性安全,即不能随意修改 ,一般的处理方式为:
#*将属性定义为私有属性(两个下划线开头)
#*添加一个可以通用的方法,供调用
#此处需再看看相关资料
#属性赋值: class User: def __str__(self): return '用户名为:%s,密码为:%s'%(self.username,self.password) u1 = User() u1.username = '张三' u1.password = '1563535' print(u1) #output :用户名为:张三,密码为:1563535 这里只要赋值就可以直接修改数据 #为了限定password的字符长度 class Usernew: def __str__(self): return '用户名为:%s,密码为:%s' % (self.username, self.password) def set_pw(self,pw): if len(pw)>6: self.password = pw else: print('密码不足六位') '''u2 = Usernew() u2.username = '李四' u2.set_pw('1535') print(u2)''' #output:密码不足六位.程序错误找不到password u3 = Usernew() u3.username = '王五' u3.set_pw('12456222485')#当u3不调用set_pw时,u3.password = '123'时,程序能正常运行,不会报错,由此引出关于对象的隐藏属性的方法 print(u3) #output:用户名为:王五,密码为:12456222485 #为了更好的保存属性的安全,使用self.__pw class Usertest: def __init__(self,pw): if len(pw)>= 6: self.__pw = pw else: print('%s不能作为密码'%pw) #能执行 def __str__(self): return'密码为:%s'%(self.__pw) #u4 = Usertest('123') #u5 = Usertest('123456') #print(u4,u5) #output: 报错:'Usertest' object has no attribute '_Usertest__pw' #当对u5的__pw进行赋值时依旧报错u5.__pw()='2211633',因为外部不能访问到__pw() #需要通过函数返回值的方式获得__pw的值 class Usertest2: def __init__(self,name,pw): self.name = name if len(pw)>=6: self.__pw = pw else: print('%s不能作为密码') def __str__(self): self.__take_pw() return'用户名为:%s,密码为:%s'%(self.name ,self__pw) def get_pw(self): return self.__pw def __take_pw(self): print(self.__pw) u6 = Usertest2('赵六','153525') print(u6.get_pw()) print(u6)