栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python中变量的封装的意义和原理

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python中变量的封装的意义和原理

什么叫私有变量,python中表示私有变量是__(双下划线)加变量名表示,为什么要私有,就好像你老子又不是什么东西都想给你,开个玩笑哈哈哈哈,那究竟是为什么呢,第一你发现我们想改某个属性的时候,是没有限制的,第二我们有些东西是不想被外面直接修改的,第三我们有时候读都不想让读的,所以.........看下面把:

class student():
    def __init__(self,name,age):
        self.name=name
        self.__age=age
student1=student('陈逸灏',20)
print(student1.age)

你会发现会报错——AttributeError: 'student' object has no attribute 'age'

原因是这个变量是类里面私有的,外面无法访问,那句有人会想我age找不到,那__age不就可以了吗,然后

class student():
    def __init__(self,name,age):
        self.name=name
        self.__age=age
student1=student('陈逸灏',20)
print(student1.__age)

继续报错————AttributeError: 'student' object has no attribute '__age',这就说明不是这个原因,我们如果想看这个属性究竟是什么,可以用print(student1.__dict__)打印出我们student1这个对象的所有属性,结果如下:

{'name': '陈逸灏', '_student__age': 20}

从上面可以看到其实我们的属性是_student__age,也就是_类名加上__属性名,这也其实是python的障眼法,其实就是把变量名改了,但这样其实也没有做到真正的私有化,所以我们要学习下面的方法:

class wife():
    def __init__(self,name,age,weghit):
        self.name=name
        self.set_age(age)
        self.__weghit=weghit
    def get_age(self):
        return self.__age
    def set_age(self,values):
        if 20<=values<=30:
            self.__age=values
        else:
            raise ValueError('不可以哦')

那么我们现在就可以用get_age的方法来查看我们的私有age属性,我们用set_age的方法来限制我们age的范围,那么我们就可以:

wife1=wife('迪丽热巴',20,100)
#答印私有年龄
print(wife1.get_age())
#修改私有年龄
wife1.set_age(30)

这样不就可以做到了吗?其实这只是一个最简单的方法,而且你会发现很麻烦,下面讲一个简单的方法python中其实自带property方法,用法如下:

class wife():
    def __init__(self,name,age,weghit):
        self.name=name
        self.__age=age
        self.__weghit=weghit
    @property
    def age(self):
        return self.__age
    @age.setter
    def age(self,vaules):
        if 20<=vaules<=40:
            self.__age=vaules
        else:
            raise ValueError('不可以哦')
    @property
    def weghit(self):
        return self.__weghit
    @weghit.setter
    def weghit(self,vaules):
        if 20<=vaules<=40:
            self.__weghit=vaules
        else:
            raise ValueError('不可以哦')

@property表示读取,@age.setter表示修改,这样就做到既可以私有,又可以直接用原有变量来进行操作,切记子类无法继承父类私有方法和属性

class wife1(wife):
    def __init__(self,name,age,weghit):
        wife.__init__(name,age,weghit)

自己不信可以,。。。。。。试下

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768083.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号