单下划线和双下划线(私有变量和公有变量)

2023-05-16

“单下划线” 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量;
“双下划线” 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。

以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用“from xxx import *”而导入;以双下划线开头的(__foo)代表类的私有成员;以双下划线开头和结尾的(__foo__)代表python里特殊方法专用的标识,如 __init__()代表类的构造函数。
结论:
1、_xxx 不能用于from module import * 以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。
2、__xxx 双下划线的表示的是私有类型的变量。只能是允许这个类本身进行访问了。连子类也不可以
3、__xxx___ 定义的是特列方法。像__init__之类的

单下划线和双下划线的执行代码和实际调用代码

In [11]: class A():
    ...:     def __function(self):
    ...:         print("x")
    ...:

In [12]: a = A()

In [13]: a._A__function()
x

In [14]: a.__function()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-14-d28aedf4bdb5> in <module>()
----> 1 a.__function()

AttributeError: 'A' object has no attribute '__function'
# 同时,在class A中对于以前__function()的调用会被自动替换成对于_A__function()的调用。

私有变量

In [15]: class A(object):
    ...:     def __init__(self):
    ...:         self.__private()
    ...:         self.public()
    ...:     def __private(self):
    ...:         print('A.__private()')
    ...:     def public(self):
    ...:         print('A.public()')
    ...:

In [16]: class B(A):
    ...:     def __private(self):
    ...:         print('B.__private()')
    ...:     def public(self):
    ...:         print('B.public()')
    ...:

In [17]: b = B()
A.__private()#因为调用A的构造函数时,加双下划线的是私有变量只有类对象自己能访问,连子类对象也不能访问到这个数据.
B.public()#调用A的构造函数时,子类B的public方法覆盖父类A的Public方法。

公有变量

In [18]: class A(object):
    ...:     def __init__(self):
    ...:         self._private()
    ...:         self.public()
    ...:     def _private(self):
    ...:         print('A._private()')
    ...:     def public(self):
    ...:         print('A.public()')
    ...:

In [19]: class B(A):
    ...:     def _private(self):
    ...:         print('B._private()')
    ...:     def public(self):
    ...:         print('B.public()')
    ...:

In [20]: b = B()
B._private()
B.public()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单下划线和双下划线(私有变量和公有变量) 的相关文章

  • 快速开发一个 ChatGPT 应用的保姆级教程

    本文转自 GitHub xff0c 原文 xff1a https github com easychen openai gpt dev notes for cn developer xff0c 版权归原作者所有 欢迎投稿 xff0c 投稿请
  • 从ROS环境搭建到机械臂仿真与实验

    一 ROS环境搭建 二 安装moveit 三 机械臂仿真 四 机械臂实验
  • Dell G3-3579 安装 Ubuntu16.04 并安装显卡驱动

    之所以没有安装18 04是因为安装ubuntu18 04后安装NVIDIA显卡驱动时总是各种坑 ubuntu18 04认证机器里面没有Dell G3相近系列 而16 04认证机器里面有G3相近系列G5 G7 安装NVIDIA显卡驱动比较容易
  • 使用opencv VideoCapture遇到问题:Unable to stop the stream: Inappropriate ioctl for device

    使用OpenCV的VideoCapture 读取 mp4文件时出现以下错误 xff1a Unable to stop the stream Inappropriate ioctl for device 此问题由于未安装ffmpeg导致 su
  • error: Unknown module(s) in QT: qml quick svg webkit multimedia multimediawidgets

    error Unknown module s in QT qml quick pro QT 43 61 qml quick sudo apt get install qtdeclarative5 dev error Unknown modu
  • pixhawk接口图以及引脚说明

    pixhawk接口图和引脚如下 pixhawk可以同时使用2个GPS xff0c 这只能使用其中一个罗盘 xff0c 实际中飞控挑选其中信号好的一个GPS进行定位 硬件部分 xff1a 第二个GPS插在serial 4 5接口上 xff0c
  • 搭建pixhawk飞控无人小车--前期准备

    2019年打算搭建一款无人小车 xff0c 具有遥控 自动走线 激光雷达避障 视觉识别等功能 1 搭建apm开发环境 感谢阿木实验室提供开发环境 xff0c 下载其提供带开发环境的虚拟机即可 下载地址如下 xff1a 该地址已经失效 xff
  • 搭建pixhawk飞控无人小车--替换自带遥控器

    因为小车原装遥控器接收机和电调版整合在一个小板子上 xff0c 且没有相关资料 xff0c 无法接入飞控 因此单独购买遥控器 在某宝上购买富斯遥控器i6 xff0c 总共六个通道 三个双向开关 一个三向开关 遥控器简单入门视频如下 xff0
  • 搭建pixhawk飞控无人小车--飞控接遥控器、舵机、电调以及模式切换

    1 pixhawk飞控的RC IN接遥控器的接收机的PPM CH1 遥控器只需要接这个接线即可 注意飞控正面朝上 xff0c 上面为接地 和遥控器接收机刚好相反 因此不要接错 如下图 2 修改遥控器配置 xff1a System gt RX
  • 欠驱动Or全驱动?——关于机械手驱动方式的介绍与更优选择(以德国Schunk Hand为例)

    这篇文章主要将介绍机械手两种不同驱动方式 即欠驱动和全驱动的定义 应用背景 优劣性能等特性 xff0c 并将以雄克灵巧手为例 xff0c 讨论现阶段机械手驱动方式的更优选择方案 定义 xff1a 首先先来明确欠驱动和全驱动的定义 xff08
  • mysql 批量插入12位随机数字

    解析 xff1a 批量 随机12位数字 mysql随机12位数字 select CEILING RAND 900000000000 43 100000000000 mysql批量处理函数 delimiter create PROCEDURE
  • 俩小伙一晚上写了个 AI 应用,月入两万??(文末附开发教程)

    开发出一款能够与 AI 对话生成和编辑思维导图的工具 xff0c 听起来似乎只能是一群专业的 AI 背景团队花费大量的时间和精力训练模型 xff0c 打磨应用才能完成的事情 但是 xff0c 两名大学生却在一夜之间完成了 xff0c 就像炼
  • 几本对于笔试和面试有用的书

    4本408核心书籍 xff1a 数据结构 计算机操作系统 计算机网络 计算机组成原理 面试宝典 xff1a 程序员面试宝典 剑指offer 编程之美 微软技术面试心得 编程珠玑 Java程序员面试宝典 C语言 xff1a The C Pro
  • 我如何在计算机视觉顶级会议CVPR上发表论文?

    Scalers 点评 xff1a 两个月前 xff0c 成长会的Ramon S290 收到了计算机视觉顶级会议CVPR论文录取的通知 xff0c 而且是口头报告 CVPR在计算机视觉领域属于三大顶级会议之一 xff0c 具有较高的影响力 x
  • nginx整体结构,进程模型

    nginx的整体结构 xff1a 启动nginx 看到了一个master进程 xff0c 一个worker进程 命令 ps ef grep nginx 第一列 xff1a UID 进程所属的用户id 第二列 xff1a 进程ID PID 用
  • ICP、ISP、IAP、JTAG、SWD下载方式

    目录 ICP ISP IAP JTAG SWD下载方式 概述 JTAG SWD ICP ISP IAP ISP与ICP的差别 ISP和IAP的差别 ICP ISP IAP JTAG SWD下载方式 概述 JTAG和SWD是一种标准协议 xf
  • Linux定时任务crontab -e编辑无法保存

    创作时间 xff1a 2022年8月16日09 36 44 提示没权限 进入 var spool下查看cron目录是正常的 xff0c 但是在cron里面没有权限建立文件这个原因 可以尝试先在 var spool cron目录下用vim编辑
  • C++内存分配

    常见的内存分配方式 静态存储区 xff08 基栈 xff09 xff1a 此时的内存在程序编译的时候已经分配好 xff0c 并且在程序的整个运行期间都存在 里面的变量通常为 xff1a static变量 全局变量const常量 xff1b
  • PWM输出讲解

    一 PWM基础知识 1 PWM的定义 PWM xff0c 是脉冲宽度调制 缩写 xff0c 它是通过对一系列脉冲的宽度进行调制 xff0c 等效出所需要的波形 xff08 包含形状以及幅值 xff09 xff0c 对模拟信号电平进行数字编码
  • Win11中安装Linux 教程 | WSL2的使用

    Windows11今天正式向大家开始推送了 xff0c 这也算是十一假期中的一个重磅消息了 我相信有很多小伙伴会升级到Windows11 那这个视频就讲解一下如何在Windows11中安装Linux系统 xff0c 来帮助我们开发 也就是我

随机推荐