0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

python私有变量和私有方法

python爬虫知识分享 来源:python爬虫知识分享 作者:python爬虫知识分享 2022-03-08 16:30 次阅读

python私有变量和私有方法

1. 下划线妙用

在 Python 中,下划线可是非常推荐使用的符号:

变量名推荐使用下划线分隔的蛇形命名法

魔法方法、构造函数都需要使用双下划线

对于暂时用不到的变量值,可以赋值给单下划线 _ 进行占位

根据分类,我把下划线写法分成下面五种:

单前导下划线:_var

单末尾下划线:var_

双前导下划线:__var

双前导和末尾下划线:__var__

单下划线:_

由于篇幅所限,本篇将只介绍跟标题(私有变量与私有方法)有关的用法,也就是访问控制。

上面五种写法中,涉及到访问控制的有:_var__var

2. 单前导下划线 _var

下划线前缀的含义是告知其他程序员以单个下划线开头的变量或方法仅供内部使用

请看下面这个例子

class Demo:
   def __init__(self):
       self.foo = 11
       self._bar = 22

如果你实例化此类,然后分别访问 self.fooself._bar 会发生什么情况?

>>> demo = Demo()
>>> demo.foo
11
>>> demo._bar
22

结果是:外界都可以直接访问这两个属性。

但实际上,二者是有区别的。PEP 8 有提及,如果一个属性的有单前导下划线,则该属性应该仅供内部访问。

但这并不是强制性的,不然上面我们也不可能通过 self._bar 访问到 22,但做为一名 Python 程序员最好遵守这一共识。

3. 双前导下划线 __var

双下划线前缀会导致Python解释器重写属性名称,以避免子类中的命名冲突。

这也叫做名称修饰(name mangling) - 解释器更改变量的名称,以便在类被扩展的时候不容易产生冲突。

我知道这听起来很抽象。因此,我组合了一个小小的代码示例来予以说明:

class Demo:
   def __init__(self):
       self.foo = 11
       self._bar = 22
       self.__baz = 33

将其进行实例化,然后使用 dir() 函数查看这个对象的属性

>>> demo = Demo()
>>> dir(demo)
['_Demo__baz', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_bar', 'foo']

不难发现,foo_bar 都很正常,可以使用 demo.属性名 进行访问。

__baz 明显和 foo_bar 不一样,尝试访问后却报了 AttributeError,属性不存在。

>>> demo.__baz
Traceback (most recent call last):
  File "", line 1, in 
AttributeError: 'Demo' object has no attribute '__baz'

如果你仔细观察,你会看到此对象上有一个名为_Demo__baz的属性。这就是Python解释器所做的名称修饰。它这样做是为了防止变量在子类中被重写。

如果想访问,那得按照 dir 提示的写法去访问,在 __baz 前面加上 _类名

>>> demo._Demo__baz
33

总结可得,使用双下划线开头的属性变量,就是一个私有变量。

这样的规则在属性上生效,在方法上也同样适用。

如果一个实例方法,以双下划线开头,那么这个方法就是一个私有的方法,不能由实例对象或者类直接调用。

必须得通过 实例._类名__方法名 来调用。

4. 总结一下

Python并没有真正的私有化支持,但可用下划线得到伪私有。

尽量避免定义以下划线开头的变量。

私有变量:以双下划线前导的变量,可以使用 实例._类名__变量名 进行访问

私有方法:以双下划线前导的方法,可以使用 实例._类名__方法名() 进行访问

私有变量和私有方法,虽然有办法访问,但是仍然不建议使用上面给出的方法直接访问,而应该用统一的接口(函数入口)来对私有变量进行查看、变量,对私有方法进行调用。

审核编辑:符乾江

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4345

    浏览量

    62946
  • 代码
    +关注

    关注

    30

    文章

    4823

    浏览量

    68997
  • python
    +关注

    关注

    56

    文章

    4807

    浏览量

    85019
收藏 人收藏

    评论

    相关推荐

    私有云电脑,怎样成功搭建私有云电脑

        在信息时代,远程连接使我们能够在不同的地点之间建立起紧密的联系,实现资源的共享和协同工作。这次给大家介绍怎样成功搭建私有云电脑?    怎样成功搭建私有云电脑?    硬件准备,选择一台性能
    的头像 发表于 01-24 10:14 90次阅读
    <b class='flag-5'>私有</b>云电脑,怎样成功搭建<b class='flag-5'>私有</b>云电脑

    把电脑当私有云,把电脑当私有云存在的风险

    在数字化转型的洪流中,远程连接已蔚然成风,而电脑远程连接软件则成为了连接各方的重要纽带。它们不仅跨越了地域的鸿沟,更让沟通与协作实现了无缝衔接。今天小编要给大家讲解把电脑当私有云存在的风险
    的头像 发表于 01-22 17:31 91次阅读
    把电脑当<b class='flag-5'>私有</b>云,把电脑当<b class='flag-5'>私有</b>云存在的风险

    电脑私有云存储怎么用啊,电脑私有云存储的使用方法

    电脑私有云存储怎么用啊,电脑私有云存储的使用方法     在当今数字化时代,电脑私有云存储为我们提供了一种安全、便捷的数据存储和管理方式,以下是其使用
    的头像 发表于 01-22 09:58 76次阅读
    电脑<b class='flag-5'>私有</b>云存储怎么用啊,电脑<b class='flag-5'>私有</b>云存储的使用<b class='flag-5'>方法</b>

    电脑私有云存储什么意思,电脑私有云存储优势与搭建方式

        在这个数字化时代,我们的生活和工作都与数据紧密相连。从海量的工作文档、珍贵的家庭照片,到重要的学习资料,数据量不断攀升,如何高效、安全地存储和管理这些数据成为了一大难题。电脑私有云存储的出现
    的头像 发表于 01-17 14:32 104次阅读
    电脑<b class='flag-5'>私有</b>云存储什么意思,电脑<b class='flag-5'>私有</b>云存储优势与搭建方式

    苹果电脑搭建私有云,苹果电脑搭建私有云的详细操作步骤

        随着云计算技术的飞速发展,云电脑逐渐走进了人们的视野。它像一朵神奇的云,承载着我们的数据和应用,让我们随时随地都能享受到高效的计算服务。今天就为大家介绍苹果电脑搭建私有云的详细操作步骤
    的头像 发表于 01-17 10:17 151次阅读
    苹果电脑搭建<b class='flag-5'>私有</b>云,苹果电脑搭建<b class='flag-5'>私有</b>云的详细操作步骤

    用普通电脑搭建私有云,用普通电脑搭建私有云教程

    随着云存储的普及,越来越多的用户开始考虑搭建自己的私有云系统。那普通电脑也能搭建私有云吗?当然可以,并且方法很简单。首先,私有云是什么?与公有云存储不同,
    的头像 发表于 01-13 13:55 136次阅读
    用普通电脑搭建<b class='flag-5'>私有</b>云,用普通电脑搭建<b class='flag-5'>私有</b>云教程

    电脑制作私有云盘,电脑制作私有云盘的教程,个人云电脑是什么以及怎么连接

    缴费,告别停车难困扰。无人驾驶出租车通过远程云控保障行驶安全,未来出行因远程连接变得智能、便捷、舒适。接下来和大家一起探索电脑制作私有云盘的教程。    电脑制作私有云盘的教程:    制作电脑私有云盘,先选择合适的
    的头像 发表于 12-30 14:08 99次阅读
    电脑制作<b class='flag-5'>私有</b>云盘,电脑制作<b class='flag-5'>私有</b>云盘的教程,个人云电脑是什么以及怎么连接

    电脑安装联想私有云,电脑如何安装联想私有云?

        在局域网环境中,云电脑工具是企业实现高效内部管理和协作的重要工具。这些软件不仅能够帮助企业提升工作效率,还能增强信息安全和监控能力。今天小编要讲解电脑如何安装联想私有云。    在电脑上安装
    的头像 发表于 12-25 13:34 218次阅读
    电脑安装联想<b class='flag-5'>私有</b>云,电脑如何安装联想<b class='flag-5'>私有</b>云?

    私有云电脑是什么,私有云电脑是什么,个人云电脑是什么以及怎么连接

    的关系更加亲密无间。接下来和大家一起探索私有云电脑是什么。    私有云电脑是什么:    私有云电脑是一种相对公有云电脑而言,将云计算资源部署在企业、家庭等私有环境中的电脑使用模式。
    的头像 发表于 12-25 13:28 107次阅读
    <b class='flag-5'>私有</b>云电脑是什么,<b class='flag-5'>私有</b>云电脑是什么,个人云电脑是什么以及怎么连接

    SAP ERP 私有云和RISE with SAP 有什么区别?

    SAP ERP 私有云版是一款 ERP 云解决方案,也是 RISE with SAP 的核心。SAP ERP 私有云版是SAP公司提供的一种企业资源规划(ERP)解决方案,它结合了传统的SAP
    的头像 发表于 11-18 09:20 371次阅读

    k8s可以部署私有云吗?私有云部署全攻略

    Kubernetes(简称K8S)可以部署私有云。Kubernetes是一个开源的容器编排引擎,能够自动化容器的部署、扩展和管理,使得应用可以在各种环境中高效运行。通过使用Kubernetes,企业可以在自己的数据中心或私有云环境中搭建和管理容器化的应用,实现高度的灵活性
    的头像 发表于 10-25 09:32 207次阅读

    公有IP与私有IP之间的区别

    今天我们来分享私有IP地址和公有IP地址的有什么区别?主要从接入方式、特点以及各自的优势来说明。
    的头像 发表于 09-21 10:49 579次阅读

    美国洛杉矶私有云核心优势是什么?

    美国洛杉矶私有云以其高安全性、优越的地理位置、强大的硬件资源和出色的服务质量而备受全球企业和个人用户的青睐。在全球化的科技与经济格局中,选择一个合适的私有云服务平台对于企业和个人的数字化转型至关重要。Rak部落为您整理发布美国洛杉矶私有
    的头像 发表于 08-12 10:21 242次阅读

    基于WDS的天瑞水泥企业高性能私有云存储方案

    基于WDS的天瑞水泥企业高性能私有云存储方案
    的头像 发表于 07-31 09:47 349次阅读
    基于WDS的天瑞水泥企业高性能<b class='flag-5'>私有</b>云存储方案

    绿联NAS DXP系列发布:内网穿透技术在私有云的应用分析

    对于NAS私有云来说,内外穿透会在不同网络环境(如内网和外网)之间实现数据访问和共享的能力,在这个背景下,内外穿透技术对于NAS私有云来说可能具有以下潜在应用
    的头像 发表于 05-24 12:06 445次阅读
    绿联NAS DXP系列发布:内网穿透技术在<b class='flag-5'>私有</b>云的应用分析