Python 私有属性与私有方法

 更新时间:2022年03月01日 16:19:38   作者:软件测试君  
这篇文章主要介绍了Python 私有属性与私有方法,私有属性是指在 Python 的面向对象开发过程中,对象的某些属性只想在对象的内部被使用,但不想在外部被访问到这些属,下面我们就进入文章一起了解更多信息内容吧

1. 场景定义

私有属性:

是指在 Python 的面向对象开发过程中,对象的某些属性只想在对象的内部被使用,但不想在外部被访问到这些属性。

即:私有属性是对象不愿意公开的属性。

私有方法:

是指在 Python 的面向对象开发过程中,对象的某些方法或者称为函数只想在对象的内部被使用,但不想在外部被访问到这些方法或函数。

即:私有方法是对象不愿意公开的方法或函数。

2. 语法定义

在 Python 中定义私有属性和私有方法的语法如下:

class Staff:
    def __init__(self, s_name, s_salary):
      self.s_name = s_name
      self.__salary = s_salary
      
    def __secret(self):
      print("%s 的工资是 %d" % (self.s_name, self.__salary))
  • (1). __salary是以两个下划线开头来定义的私有属性。
  • (2). __secret(self)是以两个下划线开头来定义的私有方法。

3. 调用分析

(1). 在__init__的对象初始化方法中,以两个下划线开头定义的__salary属性就是私有属性。

现在在对象的外部来调用一下__salary属性,看是否能正常访问该私有属性。

从上图运行结果可以看出,第11行,即在对象外部访问对象的私有属性 __salary 时,提示 AttributeError 错误,Staff 对象 zhangsan 没有属性 __salary。

为了证明 Staff 类对象确实是有__salary 这个实例属性的,只是因为在对象外部不能访问私有属性。

我把 self.__salary 修改为:self.salary__secret(self)方法对self.__salary属性的引用,做相应的修改,看如下图所示的运行结果。

可以从运行结果看出,这种非私有属性在外部的调用是正常的,没有提示 AttributeError 错误。

(2). 在__secret(self) 实例方法中,以两个下划线开头定义的__secret(self)方法就是私有方法。

和上面测试流程一样,先在对象的外部来调用私有方法__secret(self),看是否能正常调用该私有方法。

从上图运行结果可以看出,第11行,即在对象外部访问对象的私有方法__secret(self) 时,提示 AttributeError 错误,Staff 对象 zhangsan 没有 __secret 方法。

为了证明 Staff 类对象是有__secret(self)这个实例方法的,只是因为在对象外部不能访问私有方法。

我把 __secret(self) 方法修改为:secret(self),其他代码不变,看如下图所示的运行结果。

可以从运行结果看出,这种非私有方法在外部的调用是正常的,没有提示 AttributeError 错误。

(3). 从下图可以看出,在对象内部私有方法与私有属性是可以被调用的。

如图中的 work 方法调用了私有方法__secret(self),而私有方法__secret(self)调用了私有属性__salary。

在对象外部使用 Staff 类对象 zhangsan 来调用 work 方法,可以间接访问到对象的私有属性和私有方法。

从控制台输出结果来看 work 方法能正常访问到对象内部定义的私有属性和私有方法。

4. Python伪私有属性和私有方法

在 Python 中,并没有真正意义上的私有,因为 Python 内部在给属性、方法命名时,对名称做了一些特殊处理,使得外界无法访问到对应的属性和方法。

以私有属性和私有方法为例,Python内部处理方式为:

  • (1). 属性: __salary,经过处理后的属性名为:_Staff__salary(_类名__属性名)
  • (2). 方法: __secret,经过处理后的方法名为:_Staff__secret(_类名__方法名)

知道了 Python 内部对于私有属性和私有方法的处理,现在使用这种处理后的命名方式来在对象外部访问私有属性和私有方法,看是否能访问正常。

class Staff:
    def __init__(self, s_name, s_salary):
        self.s_name = s_name
        self.__salary = s_salary

    def __secret(self):
        return "%s的工资是 %d" % (self.s_name, self.__salary)


zhangsan = Staff("张三", 10000)
print(zhangsan._Staff__salary)
print(zhangsan._Staff__secret())

运行结果如下图所示:

控制台没有抛任何的异常,之前的提示 AttributeError 错误也没有了。

这个例子证明了 Python 是没有真正意义上的私有的,当知道了其内部处理方式后,依然可以使用_类名__属性名(方法名)的方法来在对象外部访问到对象内部定义的私有属性和私有方法。

但这种方式在日常工作中是不推荐使用的,既然在对象内部定义属性和方法时,就声明了其为私有的,调用方就需要遵守其规则。

到此这篇关于Python 私有属性与私有方法的文章就介绍到这了,更多相关Python私有属性与私有方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python实现对图片进行旋转,放缩,裁剪的功能

    python实现对图片进行旋转,放缩,裁剪的功能

    今天小编就为大家分享一篇python实现对图片进行旋转,放缩,裁剪的功能,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python中的Logging模块在项目应用小结

    Python中的Logging模块在项目应用小结

    Python标准库中的logging模块为我们提供了强大而灵活的日志记录功能,本文将介绍如何使用logging模块,并探讨其在Python开发中的实际应用,感兴趣的朋友一起看看吧
    2024-04-04
  • Go语言基于Socket编写服务器端与客户端通信的实例

    Go语言基于Socket编写服务器端与客户端通信的实例

    这篇文章主要介绍了Go语言基于Socket编写服务器端与客户端通信的实例,包括实现基于自定义通讯协议的Socket通信,需要的朋友可以参考下
    2016-02-02
  • python文件绝对路径写法介绍(windows)

    python文件绝对路径写法介绍(windows)

    今天小编就为大家分享一篇python文件绝对路径写法介绍(windows),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python Pingouin数据统计分析技术探索

    Python Pingouin数据统计分析技术探索

    Pingouin库基于pandas、scipy和statsmodels,为用户提供了执行常见统计分析的功能,它支持各种统计方法和假设检验,例如 t-tests、ANOVA、correlation analysis 等,本文通过一些示例代码,以更全面地了解如何使用Pingouin库进行统计分析,
    2024-01-01
  • 深入理解Playwright的高级功能和用法

    深入理解Playwright的高级功能和用法

    Playwright是一个强大而灵活的Python库,用于自动化浏览器操作和测试,本文主要介绍了深入理解Playwright的高级功能和用法,具有一定的 参考价值,感兴趣的可以了解一下
    2024-05-05
  • Python3的正则表达式详解

    Python3的正则表达式详解

    这篇文章主要为大家详细介绍了Python3正则表达式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • python实现随机漫步方法和原理

    python实现随机漫步方法和原理

    在本篇文章里小编给大家整理了关于python如何实现随机漫步的相关知识点内容,需要的朋友们学习下。
    2019-06-06
  • python+selenium的web自动化上传操作的实现

    python+selenium的web自动化上传操作的实现

    这篇文章主要介绍了python+selenium的web自动化上传操作的实现,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • 如何使用Typora+MinIO+Python代码打造舒适协作环境

    如何使用Typora+MinIO+Python代码打造舒适协作环境

    这篇文章主要介绍了如何使用Typora+MinIO+Python代码打造舒适协作环境,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05

最新评论