python面向对象封装,私有变量

一、私有变量

“_”单下划线开头的变量:_var  ,表示这些函数和变量是元素私有的或内部使用的,为非强制性(实际可修改也可引用)。

"__"双下划线开头的变量:__var,表示这些函数和变量是元素私有的或内部使用的,为强制性,对象外不可修改或引用。

单下划线例子

复制代码
class People():
    def __init__(self,name,age):
        self._name = name
        self._age = age

peo = People("aa",22)
print(peo.__dict__)
print(peo._name)
print(peo._age)
复制代码

双下划线例子

复制代码
class People():
    def __init__(self,name,age):
        self.__name = name
        self.__age = age

peo = People("aa",22)
print(peo.__dict__)
print(peo.__name)
print(peo.__age)
复制代码

 二、通过函数获取或修改私有变量

复制代码
class People():
    def __init__(self,name,age):
        self.__name = name
        self.__age = age

    def get_name(self):
        return self.__name
    def set_name(self,name):
        self.__name = name

peo = People("aa",22)
print(peo.__dict__)
print(peo.get_name())
peo.set_name("bb")
print(peo.get_name())
复制代码

 三、使用装饰器将函数变为变量,来封装对私有变量的修改

 

复制代码
class People():
    def __init__(self,name,age):
        self.__name = name
        self.__age = age

    # 通过该装饰器修饰后,该函数可以像变量一样使用
    @property
    def name(self):
        print("通过函数获取变量")
        return self.__name

    # 通过该装饰器修饰后,该函数可以像变量一样使用
    @name.setter
    def name(self,name):
        if self.__name == name:
            raise Exception("不能和原来的名字相同")
        else:
            self.__name = name

peo = People("aa",22)
print(peo.__dict__)
print(peo.name)
peo.name = "aa"
print(peo.name)
复制代码

 

posted @   远洪  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示