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

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)

大家都在看

  • Swagger

    原文:https://www.cnblogs.com/Liu-xing-wu/p/14643839.html 学习目标: 了解Swagger的概念及作用 掌握在项目中集成Swagg…

    技术杂谈 2023年5月31日
    098
  • 关于IoAttachDeviceToDeviceStack

    IoAttachDeviceToDeviceStack将Source Device附加到Target Device上。 打开windbgkd> u IoAttachDevic…

    技术杂谈 2023年5月31日
    081
  • Python 周期任务神器,太实用了

    前言 如果你想在Linux服务器上周期性地执行某个 Python 脚本,最出名的选择应该是 Crontab 脚本,但是 Crontab 具有以下缺点: 1.不方便执行秒级的任务。 …

    技术杂谈 2023年6月21日
    098
  • Mall商城的高级篇的开发(二)性能压测和性能监控

    Mall商城的高级篇的开发(二) 性能压测–压力测试 压力测试考察当前软件硬件环境下系统所能承受的最大负荷并帮助找出系统的瓶颈所在。压测都是为了系统在上线的处理能力和稳…

    技术杂谈 2023年7月11日
    079
  • VMware及win10虚拟机的安装及环境配置

    一、安装VMware 1.1、下载VMware安装包 在此给大家一个迅雷的链接:点击下载提取码:sp84 1.2、点击下一步 1.3、点击我接受,点击下一步 1.4、更换安装位置,…

    技术杂谈 2023年6月21日
    077
  • [学习笔记]Java重写和重载

    重写(Override) 重写是子类对允许访问的父类方法的方法体重新进行编写,返回值和形参不发生改变; 通过重写,子类可以根据需要定义特定于自身的行为,根据需要实现父类的方法; 方…

    技术杂谈 2023年7月24日
    068
  • vue系列— 认识Flow(一)

    1. 什么是Flow? Flow 是javascript代码的静态类型检查工具。它是Facebook的开源项目(https://github.com/facebook/flow),…

    技术杂谈 2023年6月1日
    092
  • Windows权限维持

    Windows权限维持 来源 https://cloud.tencent.com/developer/article/1850726 0x01 前言 红队人员拿到一台主机权限后首先…

    技术杂谈 2023年5月31日
    0110
  • SQL自定义函数

    存储函数和存储过程统称为存储例程(store routine),存储函数的限制比较多,例如不能用临时表,只能用表变量,而存储过程的限制较少,存储过程的实现功能要复杂些,而函数的实现…

    技术杂谈 2023年7月25日
    044
  • [Python]-pandas模块-机器学习Python入门《Python机器学习手册》-02-加载数据:加载文件

    这本书类似于工具书或者字典,对于python具体代码的调用和使用场景写的很清楚,感觉虽然是工具书,但是对照着做一遍应该可以对机器学习中python常用的这些库有更深入的理解,在应用…

    技术杂谈 2023年7月10日
    075
  • 云原生的概念

    云原生其实是一种思想,并不是一种工具,云原生更多的是一种泛化的东西,是一种思想观念,首先要有意识的去想云原生这种东西,其次,他是一种技术、流程和企业管理方法的集合,所谓的技术,k8…

    技术杂谈 2023年7月23日
    066
  • C/C++内存泄漏检测方法

    内存泄漏 检测代码 使用链表记录每个malloc返回的指针,释放时从链表中查找并删除找到对应指针的节点。 最终输出链表,该链表记录了所有没有释放的动态内存。 #include #i…

    技术杂谈 2023年6月21日
    071
  • Liunx-CentOS安装MySQL8

    0 卸载 0.1 卸载原有的MariaDB 查看MariaDB安装包 rpm -qa | grep mariadb 卸载MariaDB rpm -e mariadb-libs-5….

    技术杂谈 2023年6月21日
    0105
  • 对《GGX》shader的分析-卡通渲染-罪恶装备

    转自:https://www.element3ds.com/thread-151972-1-1.html Guilty Gear Xrd的日漫风shader一直被看作是业内这方面的…

    技术杂谈 2023年6月1日
    0106
  • Mysql之Binlog

    1、简述 binlog 二进制日志文件,这个文件记录了MySQL所有的DML操作。通过binlog日志我们可以做数据恢复,增量备份,主主复制和主从复制等等。 2、Docker中无法…

    技术杂谈 2023年6月21日
    0151
  • Rsync数据备份工具

    Rsync数据备份工具 1、Rsync基本概述 rsync是一款开源的备份工具,可以在不同主机之间进行同步(windows和Linux之间 Mac和 Linux Linux和Lin…

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