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()

 

posted @ 2019-10-22 15:47  码上测  阅读(1286)  评论(0编辑  收藏  举报