一、私有变量的定义

在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 * 进行导入,不能导入私有变量,结果如下:

使用 import somemodule 进行导入,能导入私有变量,结果如下:

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

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

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方法

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()方法一样

python 私有变量怎么调用_我的Python学习笔记(三):私有变量相关推荐

  1. Python基础学习笔记三(变量和字面量)

    版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢! 本文网址:https://blog.csdn.net/sun8112133/article/details/957661 ...

  2. python文件是什么的集合和抽象_python学习笔记(三):文件操作和集合

    这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件file.txt: 1 2 3 ...

  3. 廖雪峰讲python高阶函数求导公式_廖雪峰的学习笔记(三)高阶函数

    1.所谓的"高阶函数":把函数对象作为参数的函数. 2.示例: map()函数: 我们先看map.map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数 ...

  4. 统计学习基础:数据挖掘、推理和预测_百度零基础深度学习笔记(三) 波士顿房价预测...

    波士顿房价预测 波士顿房价预测是一个经典的机器学习任务,期待构建一个房价预测模型,其数据中包含13个影响房价的因素和该类型房屋均价. 波士顿房价影响因素 数据预处理 数据预处理包括: 数据导入 数据形 ...

  5. javascript 学习笔记三 之 变量

    关于变量 其实也没什么知识点.需要注意的大概就是以下几点 变量命名规则 js变量必须以$,英文字母 开头. js变量基本类型 基本类型分为 1. 基本类型. 也就是数字, [未完待续,要断电了] 转载 ...

  6. quartz 每30秒执行一次_作业调度框架 Quartz 学习笔记(三) -- Cron表达式

    前面两篇说的是简单的触发器(SimpleTrigger) , SimpleTrigger 只能处理简单的事件出发,如果想灵活的进行任务的触发,就要请出 CronTrigger 这个重要人物了. Cro ...

  7. Python语言入门这一篇就够了-学习笔记(十二万字)

    Python语言入门这一篇就够了-学习笔记(十二万字) 友情提示:先关注收藏,再查看,12万字保姆级 Python语言从入门到精通教程. 文章目录 Python语言入门这一篇就够了-学习笔记(十二万字 ...

  8. 《Python核心编程(第3版)》学习笔记及书评

    <Python核心编程(第3版)>学习笔记 文章目录 <Python核心编程(第3版)>学习笔记 写在前面 1. 正则表达式 1.1 常用语法 1.2 re模块 2. 网络编程 ...

  9. 【初阶】unity3d官方案例_太空射击SpacingShooter 学习笔记 显示分数时,如何让函数之间相互交流...

    [初阶]unity3d官方案例_太空射击SpacingShooter 学习笔记 显示分数时,如何让函数之间相互交流 一.关于 显示分数时,如何让函数之间相互交流 这是一个非常好的逻辑问题 1 思路:主 ...

最新文章

  1. css3价格斜切_CSS3倾斜skew()方法_CSS3教程_绿叶学习网
  2. Leetcode PHP题解--D49 821. Shortest Distance to a Character
  3. pytorch判断NaN
  4. 清华本硕男,月入5W征婚引群嘲“普通却自信”!本人回应了……
  5. java语音播报案例
  6. CSS之两栏固定布局(一)
  7. python双素数_python双素数_用Python打印100以下的所有双素数对
  8. 希望 线段树 01背包
  9. python免费 爬取原创力文档并转换成pdf(部分版)
  10. 免费提供离线地图部署服务
  11. 2021级南航计算机专硕829备考记录
  12. 《基于深度学习的自然语言处理》中文PDF+英文PDF+学习分析
  13. jsp实现登录验证码
  14. python webpy启动服务
  15. 专题:固体力学中应力与应变分析详解(7.应变分析 7.5应变张量 7.6主应变与主方向 7.7应变莫尔圆)...
  16. 圆形与矩形碰撞算法分析
  17. 【数据库】对象名称 'dbo.student' 和索引名称 'stusage' 有重复的键
  18. 【Redis缓存中间件必须要掌握的面试知识】
  19. PCL 点云平移与旋转
  20. VirtualAPP技术应用及安全分析报告

热门文章

  1. libevent学习笔记五——socketpair
  2. 怎么把照片的四个角修成弧形
  3. Python中的if...elif嵌套
  4. Word插入代码显示行号并高亮/着色显示
  5. 成功创业者 商战“五计”!
  6. Github新建仓库,新建分支并上传文件
  7. 使用vue自定义分页器
  8. AHB总线和VIP介绍总结
  9. 快速查找Python安装路径方法
  10. 网红魏道道为何不做直播:仇富心理到底扇了谁的脸?