带下划线_的变量或函数命名,带下划线的方法

python中的标识符可以包含数字、字母和_,但必须以字母或者_开头,其中以_开头的命名一般具有特殊的意义

单前置下划线的名字:《流畅的python》作者称之为”受保护的”名字,有两种主要的用法:

1、作为类名或函数名时,会阻止其他python脚本通过【from module import *】语句导入该名字,即该名字不会被星号匹配;

比如,对于上面的模块foo,如果我在另一个python脚本中使用【from foo import *】语句,实际上是访问不到_add2()函数的,但是如果我使用【from foo import add, _add2】语句,则两个函数都能被访问到。

2、作为类的属性名或方法名时意为不希望下游的程序员直接访问该名字,而导致意外覆盖该属性,但是这只是一种【命名约定】,python解释器不会对这种属性名做特殊处理。只是表示类的定义者希望这些属性或者方法是”私有的”,但实际上并不会起任何作用。

前后均带有双下划线__的命名一般用于特殊方法的命名,用来实现对象的一些行为或者功能,比如

new ()方法用来创建实例,init ()方法用来初始化对象,x + y操作被映射为方法x.add (y),序列或者字典的索引操作x[k]映射为x.getitem (k),len ()、str ()分别被内置函数len()、str()调用等等。

仅开头带双下划线__的命名用于对象的数据封装,以此命名的属性或者方法为类的私有属性或者私有方法。

如果在外部直接访问私有属性或者方法:是不可行的,这就起到了隐藏数据的作用,

但是这种实现机制并不是很严格,机制是通过自动”变形”实现的,类中所有以双下划线开头的名称 name都会自动变为”_类名name”的新名称:

这样就可以访问了。

这种机制可以阻止继承类重新定义或者更改方法的实现,比如,定义一个Foo的派生类:

重写了__spam方法,运行:

调用bar()方法的时候依然执行的是Foo类的__spam()方法,因为在bar()方法的实现中,self.__spam()已自动变形为self._Foo__spam(),Goo继承的bar()方法也是如此,注意此时运行的是父类中的私有化方法,而不是子类重写的方法。

Original: https://www.cnblogs.com/cs-markdown10086/p/14863850.html
Author: NEU_ShuaiCheng
Title: 带下划线_的变量或函数命名,带下划线的方法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/714531/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 10个开源WEB后台管理系统

    vue-Element-Admin vue-element-admin 是一个后台前端解决方案,它基于 vue 和 element-ui实现。它使用了最新的前端技术栈,内置了 i1…

    技术杂谈 2023年5月30日
    082
  • 上周热点回顾(7.25-7.31)

    热点随笔: · 手把手带你实现基于 Vite+Vue3 的在线Excel表格系统 (葡萄城技术团队)· 使用Three.js实现炫酷的赛博朋克风格3D数字地球大屏 🌐 (Drago…

    技术杂谈 2023年5月31日
    082
  • Vue 利用后端的数据字典和Map对象实现表格列字段动态转义的处理方案

    1、前言 Vue中,使用el-table组件,经常遇到列字段转义的问题。常规处理方法有以下两种: 方法1:在模板中使用v-if,直接转义。如: N Y 方法2:使用formatte…

    技术杂谈 2023年6月21日
    082
  • 介绍一个”牛逼闪闪”开源库:ja-netfilter

    上来先说点题外话,很多人最新私信我说我的开源项目 IDE Eval Resetter不好用了。我就问他为什么不好用了,不好编译了吗?他说不是,是不能在IDE上重置了。我心说,这是个…

    技术杂谈 2023年5月31日
    0159
  • 浅谈JWT

    JWT 常见的认证机制 HTTP Basic Auth HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basi…

    技术杂谈 2023年7月11日
    075
  • Golang:将日志以Json格式输出到Kafka

    工程实践中,我们往往还需要对日志进行采集,将日志归集到一起,然后用于各种处理分析,比如生产环境上的错误分析、异常告警等等。在日志消息系统领域,Kafka久负盛名,这篇文章就以将日志…

    技术杂谈 2023年7月11日
    090
  • Warning:file_get_contents():SSL operation failed with code 1

    今天使用PHP写程序获取指定接口的内容,获取内容为空加上报错报错提示显示SSL operation failed with code 1,接下来吾爱编程为大家介绍一下解决方法,有需…

    技术杂谈 2023年5月31日
    071
  • 68.可能否

    sfsd posted @2022-09-28 08:39 随遇而安== 阅读(6 ) 评论() 编辑 Original: https://www.cnblogs.com/55zj…

    技术杂谈 2023年6月21日
    092
  • Assignment Problem的若干思考

    最近受到南京一个同学的push,又开始了博客园写作之旅。欢迎大家联系我做代码实现工作,QQ:1198552514。权当赚点生活费~ 我的研究也经常用的Assignment prob…

    技术杂谈 2023年5月30日
    0110
  • Linux安装cmatrix代码雨教程

    一:介绍 cmatrix代码雨是Linux的系统屏保界面;执行cmatrix不仅可以练习简单的编译安装软件三部曲,还可以执行cmatrix命令做出代码雨,提升文化实力 二:成品演示…

    技术杂谈 2023年7月11日
    073
  • 常见的垃圾回收机制

    如何工作 在某些 Java 虚拟机中,堆的实现截然不同:它更像一个传送带,每分配一个新对象,它就向前移动一格。这意味着对象存储空间的分配速度特别快。Java 的”堆指针…

    技术杂谈 2023年7月25日
    066
  • FZU 1686 神龙的难题 (重复覆盖)

    Problem 1686 神龙的难题 Problem Description 这是个剑与魔法的世界.英雄和魔物同在,动荡和安定并存.但总的来说,库尔特王国是个安宁的国家,人民安居乐…

    技术杂谈 2023年5月30日
    0128
  • 切片的容量是怎样增长的

    一般都是在向 slice 追加了元素之后,才会引起扩容。追加元素调用的是 append 函数。 先来看看 append 函数的原型: func append(slice []Typ…

    技术杂谈 2023年5月31日
    087
  • 【邂逅Django】——(三)视图

    🛠️ Part 3:【邂逅Django】—— (三)视图 🛠️ Part 4:【邂逅Django】—— (四)表单和通用视图 🛠️ Part 5:【邂逅Django】—— (五)完…

    技术杂谈 2023年7月24日
    098
  • CSS的简单了解

    Hello CSS- Original: https://www.cnblogs.com/41357wangsun/p/16528876.htmlAuthor: 叨叨不是刀刀Tit…

    技术杂谈 2023年6月21日
    089
  • Prometheus由于时间不同步导致数据不显示

    原文链接:Prometheus由于时间不同步导致数据不显示 问题 部署 prometheus 后,访问前端界面发现: 这是由于你windows机器与部署prometheus服务器的…

    技术杂谈 2023年7月25日
    082
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球