Python_(伪)私有属性和私有方法
1、定义方式
定义方式为在属性名或者方法名前增加两个下划线。
2、为什么要定义私有属性和私有方法
对象的某些属性或方法只希望在对象的内部被使用,不希望外部代码直接访问对象的内部数据,保护数据的安全性和完整性。
2.1 私有属性或方法在对象内部可以被访问
class Person: def __init__(self, name): self.name = name # 定义私有属性 self.__like = "看苍老师表演艺术" def like(self): # 私有属性在对象的内部是可以访问的 print(f"{self.name} 爱看电影,特别喜欢{self.__like}") # 定义私有方法 def __secret(self): print(F"私有方法在对象内部是可以访问的") def love(self): self.__secret() if __name__ == '__main__': xiaoming = Person("小明") xiaoming.like() # 输出:小明 爱看电影,特别喜欢看苍老师表演艺术 xiaoming.love() # 输出:私有方法在对象内部是可以访问的
2.2 私有属性或方法在对象外部不能被访问
if __name__ == '__main__': xiaoming = Person("小明") xiaoming.__like
if __name__ == '__main__': xiaoming = Person("小明") xiaoming.__secret()
2.3 私有属性不能被外部代码修改
if __name__ == '__main__': xiaoming = Person("小明") xiaoming.__like = "看吉泽老师表演艺术" xiaoming.like()
3、为什么说私有属性或方法为“伪”
在Python中没有真正意义的私有,在定义私有属性或方法时,实际是对名称做了一些特殊处理,使得外界无法访问到。
处理方式是在私有属性或方法的名称前面加上【_类名】变为【_类名__名称】
按照处理后方式在外部就可以访问到私有的属性或方法,但是在实际开发中建议不要这么做!
if __name__ == '__main__': xiaoming = Person("小明") xiaoming._Person__like = "看吉泽老师表演艺术" xiaoming.like() xiaoming._Person__secret()