我的Python学习笔记:私有变量

2023-05-16

一、私有变量的定义

在Python中,有以下几种方式来定义变量:

  • xx:公有变量
  • _xx:单前置下划线,私有化属性或方法,类对象和子类可以访问,from somemodule import *禁止导入
  • __xx:双前置下划线,私有化属性或方法,无法在外部直接访问(名字重整所以访问不到)
  • __xx__:双前后下划线,系统定义名字(不要自己发明这样的名字)
  • xx_:单后置下划线,用于避免与Python关键词的冲突

如以下例子所示,我在test类中定义了num,_num 和 __num三个属性,并创建了test的类对象t,对这三个属性进行访问,__num不能被访问到

class test(object):
    def __init__(self):
        self.num = 10
        self._num = 20
        self.__num = 30

t = test()
print(t.num)    # 10
print(t._num)   # 20
# print(t.__num)  # AttributeError: 'test' object has no attribute 

'__num'  

可以使用命令dir查看t中的属性和方法,__num的名字已经被重整为“_test__num”了,可以使用t._test__num对__num进行访问

注:虽然私有变量可以通过_类名__变量名来访问,但强烈建议不要这样做

二、使用不同方法导入模块,模块中私有变量的使用区别

在使用不同方法导入模块后,是否能使用模块中的私有属性和方法,有以下两种情况

  • 在使用 from somemodule import * 导入模块的情况下,不能导入或使用私有属性和方法
  • 在使用 import somemodule 导入模块的情况下,能导入并使用私有属性和方法

首先我们先创建一个test.py文件,将下面代码复制进去:

num = 10
_num = 20
__num = 30

def test():
    print("--test--")

def _test2():
    print("--test2--")

def __test3():
    print("---test3--")
  • 使用 from somemodule import * 进行导入,不能导入私有变量,结果如下:
In [1]: from test import *

In [2]: num
Out[2]: 10

In [3]: _num
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-3-6dd7111d6a95> in <module>()
----> 1 _num

NameError: name '_num' is not defined

In [4]: __num
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-4-f0ba2c4a214a> in <module>()
----> 1 __num

NameError: name '__num' is not defined

In [5]: test()
--test--

In [6]: _test2()
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-6-d29889233d08> in <module>()
----> 1 _test2()

NameError: name '_test2' is not defined

In [7]: __test3()
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-7-17e592a156f3> in <module>()
----> 1 __test3()

NameError: name '__test3' is not defined

  • 使用 import somemodule 进行导入,能导入私有变量,结果如下:
In [8]: import test

In [9]: test.num
Out[9]: 10

In [10]: test._num
Out[10]: 20

In [11]: test.__num
Out[11]: 30

In [12]: test.test()
--test--

In [13]: test._test2()
--test2--

In [14]: test.__test3()
---test3--

三、对类中的私有属性进行操作的方法

如果你想对类中的私有属性进行操作时,有以下三种方法:

1、getter和setter:

添加getter和setter方法,类对象通过调用这两种方法来对私有属性进行操作

class test(object):
    def __init__(self):
        self.__num = 10
        
    def getNum(self):
        return self.__num

    def setNum(self, value):
        self.__num = value

t = test()
print(t.getNum())   # 10
t.setNum(20)
print(t.getNum())   # 20

  2、property方法

class test(object):
    def __init__(self):
        self.__num = 10

    def getNum(self):
        return self.__num
    
    def setNum(self, value):
        self.__num = value

    num = property(getNum,setNum)

t = test()
print(t.num)   # 10
t.num = 20
print(t.num)   # 20

关于property方法,我们来看下官方文档:

由文档可得:

  • property方法包含四个参数,分别为fget,fset,fdel,doc,分别对应getter方法,setter方法,deleter方法和方法说明
  • property()方法返回一个property属性,如果c是C的实例,那么c.x会调用getter方法,c.x = value会调用setter方法,而del c.x会调用deleter方法

  

  3、@property

class test(object):
    def __init__(self):
        self.__num = 10

    @property
    def num(self):
        return self.__num

    @num.setter
    def num(self, value):
        self.__num = value

t = test()
print(t.num)   # 10
t.num = 20
print(t.num)   # 20

关于@property,官方文档如下:

根据文档可得:

  • 我们可以把property()方法当成一个装饰器来使用,使用@property对方法进行装饰
  • 装饰器@property把方法x()转换成了与方法名同名的getter方法,"I'm the 'x' property."是property的doc参数
  • 调用方法和property()方法一样
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我的Python学习笔记:私有变量 的相关文章

  • 关于Linux系统之VM安装配置(每一个步骤都超级详细的哦!)

    目录 Linux简介 VM虚拟机的介绍及安装 VM简介 VM安装 xff08 详细步骤 xff0c 根据图片一步一步进行安装 xff09 查看IP配置IP 换源 1 xff09 备份Linux自带的EPEL源 2 xff09 生成阿里源 3
  • 单片机有很多种-1.3.第1季第3部分-朱有鹏-专题视频课程

    单片机有很多种 1 3 第1季第3部分 1864人已学习 课程介绍 本课程是 朱有鹏老师单片机完全学习系列课程 第1季第3个课程 xff0c 主要讲了单片机的发展史 xff0c 各种主流单片机的各自特点 xff0c STC51单片机的各系列
  • 如果还不会这几个工具,那你白混了

    大家好 xff0c 我是加摩斯 xff0c 觉得文章有帮助的小伙伴 xff0c 记得一键三连哟 xff5e 申明 xff1a 原创 xff0c 转载前请与我沟通 如何高效的描述问题 xff1f 我们现在这个时代 xff0c 不缺乏有能力的人
  • 软考——软件工程——软件生存周期

    目录 1 xff0c 软件生存周期 2 xff0c 软件过程 3 xff0c 瀑布模型 4 xff0c 增量模型 5 xff0c 演化模型 6 xff0c 螺旋模型 7 xff0c 喷泉模型 8 xff0c 统一过程 9 xff0c 敏捷过
  • Java基础面试题(史上最全、持续更新、吐血推荐)

    Java概述 何为编程 编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码 xff0c 并最终得到结果的过程 为了使计算机能够理解人的意图 xff0c 人类就必须要将需解决的问题的思路 方法 和手段通过计算机能够理解的形式告诉
  • 基于stm32单片机甲醛烟雾温湿度检测仪设计

    目录 第1章 绪论 1 1 引言 1 1 1甲醛的特性及危害 1 1 2甲醛的来源 1 2甲醛检测仪的种类 第 xff12 章 概述 2 1系统总概述 2 2总体方案设计 2 3硬件设计 2 4软件设计 第3章 硬件设计 3 1 硬件设计主
  • 二叉树的前中后序遍历

    作者 xff1a 渴望力量的土狗 博客主页 xff1a 渴望力量的土狗的博客主页 专栏 xff1a 手把手带你刷牛客 工欲善其事必先利其器 xff0c 给大家介绍一款超牛的斩获大厂offer利器 牛客网 点击免费注册和我一起刷题吧 目录 二
  • 国内云桌面架构有哪些?为什么VDI能成为主流

    中国 云电脑 基础架构可划分为VDI架构 IDV架构 VOI架构 xff0c 不同的服务厂商通常会在各自架构中进行一定程度上的定制化 VDI架构 xff08 virtual desktop infrastruscture 虚拟桌面基础架构
  • 【STM32 基础实验蜂鸣器发声】

    文章目录 一 认识蜂鸣器 xff08 1 xff09 蜂鸣器 xff08 2 xff09 蜂鸣器分类 二 基于stm32f10c8t6 基础实验蜂鸣器发声 xff08 1 xff09 本实验蜂鸣器型号说明 xff08 2 xff09 蜂鸣器
  • docker安装

    一 安装前准备 根据不同系统准备安装docker的安装包 xff0c 准备符合docker安装需求的Centos Ubuntu系统 二 Centos系统 安装前准备 1 系统要求 要在 CentOS 上安装 Docker xff0c 最低的
  • Python3入门教程||Python3 正则表达式||Python3 CGI 编程

    Python3 正则表达式 在 Python3 中正则表达式是一个特殊的字符序列 xff0c 它能帮助你方便的检查一个字符串是否与某种模式匹配 Python 自1 5版本起增加了re 模块 xff0c 它提供 Perl 风格的正则表达式模式
  • 树莓派安装qq最新版本 kali安装qq最新版本

    前几天我一个linux老用户看到摆烂摆了4年多的qq for linux竟然更新了 xff0c 必须给我树莓派炫一个 不多说 xff0c 开搞 首先 xff0c 要安装的就是依赖 xff1a sudo apt install libgtk2
  • 玩转你的开发板-1.4.第1季第4部分-朱有鹏-专题视频课程

    玩转你的开发板 1 4 第1季第4部分 1586人已学习 课程介绍 本课程是 朱有鹏老师单片机完全学习系列课程 第1季第4个课程 xff0c 主要内容是带领大家玩转课程配套开发板 xff0c 包括 xff1a 开发板的整体配件认识 检测 程
  • Invalid <param> tag: Cannot load command parameter [robot_description]: command [[‘/opt/ros/noetic/l

    Ubuntu20 04 运行LIO SAM遇到这个错误 xff0c 一直解决不掉 xff0c 好像是xacro文件的问题 xff0c 有大佬帮忙看一下吗 xff1f 求求了
  • MDK5 Debug调试方法总结

    常见的Debug方法 连接好硬件DAP之后 xff0c 需要进行一些设置 Debug调试按钮分别对应的功能 按钮1 gt reset复位按钮 按钮2 gt run按钮 xff0c 程序运行按钮 按钮3 gt stop按钮 xff0c 程序停
  • 51单片机(DHT11温湿度传感器)

    一 产品介绍 1 运用场景 xff08 温湿度检测系统 xff09 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器 xff0c 应用领域 xff1a 暖通 空调 xff1b 汽车 xff1b 消费品 xff1b 气
  • 单片机毕设分享 智能窗户系统(源码+硬件+论文)

    文章目录 0 前言1 主要功能2 硬件设计 原理图 3 核心软件设计4 实现效果5 最后 0 前言 x1f525 这两年开始毕业设计和毕业答辩的要求和难度不断提升 xff0c 传统的毕设题目缺少创新和亮点 xff0c 往往达不到毕业答辩的要
  • Linux——实施高级存储功能(VDO)

    一 stratis存储 xff1a stratis存储是一种高效率管理存储的方式 xff0c 可实施灵活的文件系统 xff0c 使之随数据动态增长 需要安装stratus cli和stratisd软件包 stratis pool creat
  • 毕业设计 基于单片机的智能窗户系统(源码+硬件+论文)

    文章目录 0 前言1 主要功能2 硬件设计 原理图 3 核心软件设计4 实现效果5 最后 0 前言 x1f525 这两年开始毕业设计和毕业答辩的要求和难度不断提升 xff0c 传统的毕设题目缺少创新和亮点 xff0c 往往达不到毕业答辩的要
  • 立创EDA怎么批量处理元器件

    1 点击编辑 点击查找相似对象 xff08 也可以按快捷键Ctrl 43 Shift 43 F xff09 2 之后弹出这个对话框 xff0c 搜索你需要的条件 种类 xff1a 选择你需要批量查找的元素类型 范围 xff1a 在当前原理图

随机推荐

  • 超声波模块工作原理

    超声波测距模块工作原理 xff08 1 xff09 采用IO口TRIG触发测距 xff0c 给至少10us的高电平信号 xff08 2 xff09 模块自动发送8个40khz的方波 xff0c 自动检测是否有信号返回 xff1b xff08
  • GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=(u32)8<<12;(学习笔记)

    看原子哥的IIC h文件看到这两个语句有点懵 xff0c 去找了半天资料才懵懵懂懂 xff0c 下面简单记录一下 xff0c 以防下次又忘了 就拿这个举例把 xff0c GPIO一组有 xff08 0 15 xff09 一共16个 前 xf
  • C#public,protected,private,internal,protected internal学习笔记

    比如说 xff1a 一个人A为父类 xff0c 他的儿子B xff0c 妻子C xff0c 私生子D xff08 注 xff1a D不在他家里 xff09 如果我们给A的事情增加修饰符 xff1a 1 public事件 xff1a 地球人都
  • 动手写代码之前必须的准备工作-1.5.第1季第5部分-朱有鹏-专题视频课程

    动手写代码之前必须的准备工作 1 5 第1季第5部分 2423人已学习 课程介绍 本课程是 朱有鹏老师单片机完全学习系列课程 第1季第5个课程 xff0c 主要内容是开发环境的搭建 C语言基础知识 数据手册的带读等编程前导知识 学习本课程的
  • Ubuntu:gcc编译报错 fatal error: stdio.h 没有那个文件或目录解决方法

    跟着火哥学习liunx xff0c 在跟着视频学习到第13讲的时候遇到了gcc编译hello c报错的问题 xff0c 也是搞了半天查了很多解决方案都是叫我安装C C 43 43 环境什么的 xff0c 但试了并没有用 xff0c 可能是我
  • 一文教你实现Spring动态启停定时任务

    为什么需要定时任务 定时任务的应用场景十分广泛 xff0c 如定时清理文件 定时生成报表 定时数据同步备份等 Java定时任务的原理 jdk自带的库中 xff0c 有两种技术可以实现定时任务 xff0c 一种是Timer 另一种是 Sche
  • 市面上主流TPMS胎压芯片介绍

    今天的汽车胎压芯片市场是算热闹的 xff0c 相对于2016年时 xff0c 国产 国外的都有了新的变化 xff0c 对产品开发者或者说使用者来说 xff0c 无疑是福音 xff0c 要想国内胎压市场从2005年左右到2016年 xff0c
  • Hbase的安装与配置

    文章目录 Hbase 安装配置一 xff0c 测试Hadoop 安装1 xff0c ssh 免密测试2 xff0c jps 查看进程 二 xff0c 安装Hbase1 xff0c 拷贝Hbase 2 5 0 到 opt 目录下 三 xff0
  • Python 数据可视化的三大步骤

    1 首先 xff0c 要知道我们用哪些库来画图 matplotlib Python中最基本的作图库就是matplotlib xff0c 是一个最基础的Python可视化库 xff0c 一般都是从matplotlib上手Python数据可视化
  • 本文一步一步地教你如何将Python程序打包成exe文件—赶紧进来学习吧

    先来看看几个问题 一 什么是exe可执行文件 xff1f exe文件英文全名是executable file xff0c 翻译为可执行文件 xff08 但它不等于可执行文件 xff09 xff0c 可执行文件包含两种 xff0c 文件扩展名
  • 用python代码画爱心,来自程序猿的浪漫

    不相信python代码可以画爱心 xff1f 先来一张效果图来看看效果吧 xff01 用python代码画爱心的思路是怎样的 xff1f 1 怎么画心形曲线 2 怎么填满心形曲线 3 怎么用 python 画出爱心 接下来看好了 xff0c
  • 从协方差的角度详解线性判别分析原理+Python实现

    目录 写在前面 机器学习强基计划聚焦深度和广度 xff0c 加深对机器学习模型的理解与应用 深 在详细推导算法模型背后的数学原理 xff1b 广 在分析多个机器学习模型 xff1a 决策树 支持向量机 贝叶斯与马尔科夫决策 强化学习等 1
  • Python量化交易实战:获取股票数据并做分析处理

    量化交易 xff08 也称自动化交易 xff09 是一种应用数学模型帮助投资者进行判断 xff0c 并且根据计算机程序发送的指令进行交易的投资方式 xff0c 它极大地减少了投资者情绪波动的影响 量化交易的主要优势如下 xff1a 快速检测
  • Python读取xml文件

    关于python读取xml文章很多 xff0c 但大多文章都是贴一个xml文件 xff0c 然后再贴个处理文件的代码 这样并不利于初学者的学习 xff0c 希望这篇文章可以更通俗易懂的教如何使用python 来读取xml 文件 什么是xml
  • 单片机控制第一个外设-LED灯-第1季第6部分-朱有鹏-专题视频课程

    单片机控制第一个外设 LED灯 第1季第6部分 3352人已学习 课程介绍 本课程是 朱有鹏老师单片机完全学习系列课程 第1季第6个课程 xff0c 主要讲解LED的工作原理和开发板原理图 实践编程等 xff0c 通过学习目的是让大家学会给
  • Python——闭包详解

    在函数编程中经常用到闭包 闭包是什么 xff0c 它是怎么产生的及用来解决什么问题呢 给出字面的定义先 xff1a 闭包是由函数及其相关的引用环境组合而成的实体 即 xff1a 闭包 61 函数 43 引用环境 想想Erlang的外层函数传
  • Python 中的类与继承

    类的定义以及实例的建立 Python中 xff0c 类通过 class 关键字定义 例如最简单的一个类定义可以为 xff1a class Person object pass Python 的编程习惯 xff0c 类名以大写字母开头 xff
  • Python中的type和object详解

    这篇博客主要描述Python的新风格对象 new style objects xff0c 如下 xff1a lt type 39 type 39 gt 和 lt type 39 object 39 gt 分别是什么 xff1f 用户自定义的
  • Python装饰器大详解

    一 作用域 在python中 xff0c 作用域分为两种 全局作用域和局部作用域 全局作用域是定义在文件级别的变量 函数名 而局部作用域 xff0c 则是定义函数内部 关于作用域 xff0c 我们要理解两点 xff1a a 在全局不能访问到
  • 我的Python学习笔记:私有变量

    一 私有变量的定义 在Python中 xff0c 有以下几种方式来定义变量 xff1a xx xff1a 公有变量 xx xff1a 单前置下划线 xff0c 私有化属性或方法 xff0c 类对象和子类可以访问 xff0c from som