龙空技术网

面向对象__init__(self)属性封装

python自羞 189

前言:

而今各位老铁们对“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_