Python3 对象私有属性和私有方法总结

Posted 在奋斗的大道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python3 对象私有属性和私有方法总结相关的知识,希望对你有一定的参考价值。

应用场景:

  • 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到
  • 私有属性 就是 对象 不希望公开的 属性
  • 私有方法 就是 对象 不希望公开的 方法

定义方式:

  • 在 定义属性或方法时,在 属性名或者方法名前 增加 两个下划线,定义的就是 私有 属性或方法

eg: 定义model.py 文件,核心代码如下

# 定义Person 类,包含对象属性name 和对象私有属性 age 和对象私有方法
class Person:
    def __init__(self, name):
        self.name = name
        # 定义对象私有属性age
        self.__age = 30

    # 定义对象私有方法secret
    def __secret(self):
        print("我的年龄是 %d" % self.__age)



在main.py 文件中,引用model.py 文件中的Person类。

情况一:访问对象私有属性

# 引入自定义Person 类
from ceshi import Person

# 按间距中的绿色按钮以运行脚本。
if __name__ == '__main__':
    
    # 验证 对象私有属性方法和方法 是否可以访问
    person = Person("周志刚")
    print(person.__age)

效果展示:

 情况二:访问对象私有方法

# 引入自定义Person 类
from ceshi import Person

# 按间距中的绿色按钮以运行脚本。
if __name__ == '__main__':
    
    # 验证 对象私有属性方法和方法 是否可以访问
    person = Person("周志刚")
    person.__secret()

效果展示:

针对对象私有属性和方法, 访问办法总结:

方式一:在类中添加对象实例方法,间接访问对象私有属性和方法。

改造Person类,添加对象实例方法getAge,修正后代码

# 定义Person 类,包含对象属性name 和对象私有属性 age 和对象私有方法
class Person:
    def __init__(self, name):
        self.name = name
        # 定义对象私有属性age
        self.__age = 30

    # 定义对象私有方法secret
    def __secret(self):
        print("我的年龄是 %d" % self.__age)

    def getAge(self):
        self.__secret()
        print("我的年龄是 %d" % self.__age)
# 引入自定义Person 类
from ceshi import Person

# 按间距中的绿色按钮以运行脚本。
if __name__ == '__main__':
    
    # 验证 对象私有属性方法和方法 是否可以访问
    person = Person("周志刚")
    person.getAge()

效果展示:

 方式二:在私有属性/方法 前面加上 _类名 => _类名__私有属性/方法

# 引入自定义Person 类
from ceshi import Person

# 按间距中的绿色按钮以运行脚本。
if __name__ == '__main__':
    
    # 验证 对象私有属性方法和方法 是否可以访问
    person = Person("周志刚")
    # 对象私有属性,外部直接访问到
    print(person._Person__age)
    # 对象私有方法,外部直接访问到
    person._Person__secret()

 

以上是关于Python3 对象私有属性和私有方法总结的主要内容,如果未能解决你的问题,请参考以下文章

第四周学习总结 补充

python3 私有化 属性property

python之路之前没搞明白4面向对象(封装)

python 面向对象专题:私有成员类方法静态方法属性isinstance/issubclass

python 面向对象专题:私有成员类方法静态方法属性isinstance/issubclass

面向对象总结