python 私有变量怎么调用_我的Python学习笔记(三):私有变量
一、私有变量的定义
在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学习笔记(三):私有变量相关推荐
- Python基础学习笔记三(变量和字面量)
版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢! 本文网址:https://blog.csdn.net/sun8112133/article/details/957661 ...
- python文件是什么的集合和抽象_python学习笔记(三):文件操作和集合
这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件file.txt: 1 2 3 ...
- 廖雪峰讲python高阶函数求导公式_廖雪峰的学习笔记(三)高阶函数
1.所谓的"高阶函数":把函数对象作为参数的函数. 2.示例: map()函数: 我们先看map.map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数 ...
- 统计学习基础:数据挖掘、推理和预测_百度零基础深度学习笔记(三) 波士顿房价预测...
波士顿房价预测 波士顿房价预测是一个经典的机器学习任务,期待构建一个房价预测模型,其数据中包含13个影响房价的因素和该类型房屋均价. 波士顿房价影响因素 数据预处理 数据预处理包括: 数据导入 数据形 ...
- javascript 学习笔记三 之 变量
关于变量 其实也没什么知识点.需要注意的大概就是以下几点 变量命名规则 js变量必须以$,英文字母 开头. js变量基本类型 基本类型分为 1. 基本类型. 也就是数字, [未完待续,要断电了] 转载 ...
- quartz 每30秒执行一次_作业调度框架 Quartz 学习笔记(三) -- Cron表达式
前面两篇说的是简单的触发器(SimpleTrigger) , SimpleTrigger 只能处理简单的事件出发,如果想灵活的进行任务的触发,就要请出 CronTrigger 这个重要人物了. Cro ...
- Python语言入门这一篇就够了-学习笔记(十二万字)
Python语言入门这一篇就够了-学习笔记(十二万字) 友情提示:先关注收藏,再查看,12万字保姆级 Python语言从入门到精通教程. 文章目录 Python语言入门这一篇就够了-学习笔记(十二万字 ...
- 《Python核心编程(第3版)》学习笔记及书评
<Python核心编程(第3版)>学习笔记 文章目录 <Python核心编程(第3版)>学习笔记 写在前面 1. 正则表达式 1.1 常用语法 1.2 re模块 2. 网络编程 ...
- 【初阶】unity3d官方案例_太空射击SpacingShooter 学习笔记 显示分数时,如何让函数之间相互交流...
[初阶]unity3d官方案例_太空射击SpacingShooter 学习笔记 显示分数时,如何让函数之间相互交流 一.关于 显示分数时,如何让函数之间相互交流 这是一个非常好的逻辑问题 1 思路:主 ...
最新文章
- css3价格斜切_CSS3倾斜skew()方法_CSS3教程_绿叶学习网
- Leetcode PHP题解--D49 821. Shortest Distance to a Character
- pytorch判断NaN
- 清华本硕男,月入5W征婚引群嘲“普通却自信”!本人回应了……
- java语音播报案例
- CSS之两栏固定布局(一)
- python双素数_python双素数_用Python打印100以下的所有双素数对
- 希望 线段树 01背包
- python免费 爬取原创力文档并转换成pdf(部分版)
- 免费提供离线地图部署服务
- 2021级南航计算机专硕829备考记录
- 《基于深度学习的自然语言处理》中文PDF+英文PDF+学习分析
- jsp实现登录验证码
- python webpy启动服务
- 专题:固体力学中应力与应变分析详解(7.应变分析 7.5应变张量 7.6主应变与主方向 7.7应变莫尔圆)...
- 圆形与矩形碰撞算法分析
- 【数据库】对象名称 'dbo.student' 和索引名称 'stusage' 有重复的键
- 【Redis缓存中间件必须要掌握的面试知识】
- PCL 点云平移与旋转
- VirtualAPP技术应用及安全分析报告