python变量前的单下划线(私有变量)和双下划线()
1.单下划线
变量前的单下划线表示表面上私有 ,但是其实这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。
2.双下划线
变量前的双下划线表示真正的私有,实际上的私有,只有内部可以访问,外部不能访问
但是有窍门,可以在类里面增加get__namedede和set__namedede这样的方法来突破限制,而且还能在方法里做验证。
3.其他(如:init):
名称前后的双下划线是一种惯例,对Python系统来说,这将确保不会与用户自定义的名称冲突。通常,你将会覆写这些方法,并在里面实现你所需要的功能,以便Python调用它们。例如,当定义一个类时,你经常会覆写“init”方法
总结:
| 前面单下划线 | _var | 变量所在模块/类以外的地方也能访问该变量,但最好不要 |
| 前面双下划线 | __privateVar | 变量所在模块/类以外的地方不能访问该变量,这是私有变量 |
| 前后双下划线 | 如__name__和__init__ | Python内置特殊变量,哪儿都可以访问 |
示例:
class MyName:
_name = "WinerChan111" # 伪私有变量
__namedede = "WinerChan222" # 真正私有变量,但是增加get__namedede和set__namedede实例方法可访问
def get_namedede(self):
return self.__namedede def set_namedede(self,s):
self.__namedede = s print(MyName._name)
print(MyName.__namedede) #############输出#######################
>>>
>>> class MyName:
... _name = "w1"
... __namedede = "w2"
...
>>> print(MyName._name)
w1
>>> print(MyName.__namedede)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'MyName' has no attribute '__namedede'
>>>
class MyName:
_name = "WinerChan111" # 伪私有变量
__namedede = "WinerChan222" # 真正私有变量,但是增加get__namedede和set__namedede实例方法可访问
def get_namedede(self):
return self.__namedede def set_namedede(self,s):
self.__namedede = s print(MyName._name)
print(MyName.__namedede)
###########输出###########
>>>
>>>
>>> print(MyName._name)
w1
>>> r = MyName()
>>> print(r.get_namedede())
w2
>>> name = "w3"
>>> r.set_namedede(name)
>>> r.get_namedede()
'w3'
>>>
>>>
python变量前的单下划线(私有变量)和双下划线()的更多相关文章
- 我的Python学习笔记(三):私有变量
一.私有变量的定义 在Python中,有以下几种方式来定义变量: xx:公有变量 _xx:单前置下划线,私有化属性或方法,类对象和子类可以访问,from somemodule import *禁止导入 ...
- python 名称前的单下划线
单前导下划线 _var 1.特点一 在PEP8约定中定义,以单个下划线开头的变量或方法仅供内部使用.用于指定该名称属性为“私有”.为了使其他人(或你自己)使用这些代码时将会知道以“_”开头的名称只供内 ...
- python类中方法加单下划线、双下划线、前后双下滑线的区别
首先看一段代码: class Foo(): def __init__(self): print "__init__ method" def public_method(self): ...
- python(57):私有变量,代码块
转载:http://blog.csdn.net/zhu_liangwei/article/details/7667745 引子 我热情地邀请大家猜测下面这段程序的输出: class A(object) ...
- Python3 单下划线_双下划线__开头
Python 中,下划线对解释器有特殊的含义,而且是内建标识符所使用的符号,使用时要多加留意. 在 Python3 的面向对象中,双下划线开头的变量和方法表名为私有变量和私有方法. __private ...
- Python基础_私有变量访问限制
Python内置了一些特殊变量,以前后上下划线标注,同时我们自己要想定义一些变量,不想让外部访问,又该怎么做呢?更多内容请参考:Python学习指南 访问限制 在class内部,可以有属性和方法,而外 ...
- Python - 面向对象(三)公共变量,受保护变量,私有变量
前言 在Python的类里面,所有属性和方法默认都是公共的:但Python也可以设置受保护.私有类型的变量or方法 受保护类型的变量.方法 一般称为:protected变量 #!/usr/bin/en ...
- Python模块是否支持自定义属性使用双下划线开头和结尾?
我们知道在Python中,变量名类似__xxx__的,也就是以双下划线开头并且以双下划线结尾的变量和方法,是特殊变量,特殊变量是可以直接访问的,不是私有变量,所以,一般实例变量和类变量以及方法不能用_ ...
- ORM( ORM查询13种方法3. 单表的双下划线的使用 4. 外键的方法 5. 多对多的方法 ,聚合,分组,F查询,Q查询,事务 )
必知必会13条 <1> all(): 查询所有结果 <2> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或 ...
随机推荐
- python之pip install
安装方式1 wget http://python-distribute.org/distribute_setup.py sudo python distribute_setup.py wget h ...
- Windows OS添加USB3.0驱动!
原因:现在的win7.win2008等一些早期的系统在安装时无法使USB鼠标和键盘... 1. 素材(dism64工具.UltraISO工具.U盘一个) 2. 先使用UltrISO工具制作一个wi ...
- Thread API的详细介绍
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurr ...
- 如果通过脚本来关闭程序-linux
正常情况下在linux关闭一个程序最好是走正常的关闭流程,不要直接杀死进程,这样程序的稳定性确实会收到影响,但是如果想通过脚本来关闭程序正常情况下比较困难的,我便采取了这种暴力的方法-直接杀死进程. ...
- CF356E - Xenia and String Problem
也许更好的阅读体验 \(\mathcal{Description}\) 定义一种字符串\(gray\)串满足: 长度为奇数 正中间的字母只出现一次 左右两端相同,左右两端也是gray串 一个\(gra ...
- Apache Httpd 启用重定向 rewrite
1.启用模块 由:#LoadModule rewrite_module modules/mod_rewrite.so 更改为:LoadModule rewrite_module modules/mod ...
- Hack The Box Web Pentest 2019
[20 Points] Emdee five for life [by L4mpje] 问题描述: Can you encrypt fast enough? 初始页面,不管怎么样点击Submit都会显 ...
- 前端js性能优化的要点
1 尽量少使用全局查找,比如全局变量,如果要多次使用,可以将全局变量存为局部变量再使用 eg:function(){ var body=document.body; alert(body): body ...
- Java连载10-数据类型取值范围&转义字符
一.数据类型取值范围 二.八种数据类型在成员变量中的默认值 (1)成员变量,没有赋值,编译不会报错,系统会自动给赋值 byte\int\short\long默认值为0:float\double默认值为 ...
- sift、surf、orb 特征提取及最优特征点匹配
目录 sift sift特征简介 sift特征提取步骤 surf surf特征简介 surf特征提取步骤 orb orb特征简介 orb特征提取算法 代码实现 特征提取 特征匹配 附录 sift si ...