前言:
而今各位老铁们对“python的_init_”都比较珍视,我们都想要了解一些“python的_init_”的相关资讯。那么小编同时在网摘上网罗了一些对于“python的_init_””的相关资讯,希望姐妹们能喜欢,你们快快来了解一下吧!1:没有封装的时候,很容易获取到
2:封装之后,对象的值不会轻易被获取到
3:加上get之后,就可以在满足一定的条件执行获取到对象name和age的值
可能有的朋友觉得迷惑,既然你不想让对方随意获取到你的name和age,但是你用采取get的方法又可以查看到.感觉有点自相矛盾.
其实我在定义第二个def get__name(self):这个里面可以再添加一个判断条件
满足我的条件了就可以看,满足不了我就给他返回一个其他数值或者字符串提示:
例如: 我先给他设置一个flag,如果为真就可以查看,否则就查看不了
具体的条件可以自己去写一下,这里只是举一个简单例子说明.
set方法:
隐藏属性,只能在类中使用
对私有属性的赋值和取值能起到一定的限制作用.
class Persion: __slots__ = ['__name','__age','__Flag'] def __init__(self,name,age): self.__name=name self.__age=age self.__Flag=True def get__name(self): if self.__Flag: return self.__name else: return '没有权限查看' def set_name(self,name): self.__name=namep1=Persion('luxu',20)print(p1.get__name())p1.set_name('sjsjsj')print(p1.get__name())
加上这个 __slots__ = ['__name','__age','__Flag'] 意思就是只能修改定义一个特殊的slots变量,来限制该class实例能添加的属性:
当然我们也可以给设置name的时候加判断语句,不符合条件的不能给name赋值
总结:
属性封装到类里面之后:
1:隐藏属性,只能在类中使用;2:对私有属性的赋值和取值起到一定的限制作用
通过set方法限制赋值;通过get方法限制取值
但是有时候感觉这种赋值没有直接p1.name ='xxx'方便,能不能不用get 和set方法
当然是可以的
在get方法上添加@property装饰器, 函数的名字最好简单,让使用者在调用或者访问的时候更加简单
在set方法上添加 @属性名.setter (这里的属性名指的是上一级的get 名字'name')
class Persion: __slots__ = ['__name','__age','__Flag'] def __init__(self,name,age): self.__name=name self.__age=age self.__Flag=True @property def name(self): if self.__Flag: return self.__name else: return '没有权限查看' @name.setter def name(self,name): if len(name)>6: self.__name=name else: print('名字长度不够')p1=Persion('luxu',20)print(p1.name)p1.name='liaoxiaolong'print(p1.name)
拓展:我们可以设置一下简单的登录判断,如果满足登录判断条件就把flag设置为True,提示登录成功,flag为True之后,才可以提示有权限查看,get到相要查看的数值
class Persion: __slots__ = ['__name','__age','__Flag','__password'] def __init__(self,name,age): self.__name=name self.__age=age self.__Flag=False self.__password='123456' @property def name(self): if self.__Flag: return self.__name else: return '没有权限查看' @name.setter def name(self,name): if len(name)>6: self.__name=name else: print('名字长度不够') def login(self,name,password): if self.__name==name and self.__password==password: print('登录成功') self.__Flag=True else: print('登录失败')p1=Persion('luxu',20)p1.login('luxu','123456')print(p1.name)p1.name='liaoxiaolong'print(p1.name)
标签: #python的_init_