一、私有变量
“_”单下划线开头的变量:_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)
标签:__,.__,封装,name,python,self,面向对象,peo,age From: https://www.cnblogs.com/liyuanhong/p/18105473