Python 私有变量的访问和赋值
首先我们这里先描述下:
  Python中,变量名类似__x__的,以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的(比如 __doc__, __init__等),不是private变量,
所以,不能用__name__、__sex__这样的变量名定义私有变量。
有些时候,你会看到以一个下划线开头的实例变量名,比如_name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,
虽然该变量是可以被访问,但是建议遵循命名规范命名。我们看个例子:访问python的私有变量:
class Person(object):
    def __init__(self, name, sex):
        self.__name = name
        self.__sex = sex
    def get_name(self):
        return self.__name
    def get_sex(self):
        return self.__sex
    def set_sex(self, sex):
        self.__sex = sex
p = Person('mary', 'female')
print(p.get_name())
我们知道,私有变量是不能直接通过:p.__name直接访问滴。而是必须在类内部通过方法返回私有变量。
那么双下划线开头的实例变量是不是一定不能从外部访问呢?也不是。不能直接访问__name是因为Python解释器对外把__name变量改成了_Person__name,
所以,我们仍然可以通过 _person__name 来访问__name变量(注意这里的下划线):
print(p._Person__name) # mary
但是我强烈建议大家不要这么做,因为不同版本的Python解释器可能会把__name改成不同的变量名。
注意下面的这种错误写法:
p = Person('mary', 'female')
p.__sex = 'male' # 设置__sex变量!
print(p.__sex) # 这里输出变量值为 male
#print(p._Person__sex) # female
print(p.__sex) # male
print(p.get_sex())# female
总结:
表面上看,外部代码“成功”地设置了__sex变量,但实际上这个__sex变量和class内部的__sex变量不是一个变量! 内部的__sex变量已经被Python解释器自动改成了_Person__sex,而外部代码是给m实例新增了一个__sex变量。
Python 私有变量的访问和赋值的更多相关文章
- 关于 私有变量的访问问题【 java python]
		#coding:utf-8 class Teacher(): __clas = '' # 类私有变量同样遵循,只能在类内部访问,外部无法访问,但是类的方法可以访问同类所有对象私有变量这个规则. def ... 
- Python 私有变量中两个下划线 _ _item 与 一个下划线的区别 _item
		python中没有常量的说法, 但是可以通过元组实现一个常量 在python的私有变量中, 存在两个下划线 _ _item 与一个下划线 _item 的区别 前面带两个下划线的私有变量: 只能在本类中 ... 
- [python] 私有变量和私有方法
		1.在Python中要想定义的方法或者变量只在类内部使用不被外部调用,可以在方法和变量前面加 两个 下划线 #-*- coding:utf-8 -*- class A(object): name = ... 
- python day1 变量的命名和赋值
		变量 一.变量的命名 1.不能以数字进行开头 2.不能包含特殊字符 3.不能是python内部的某些关键字 a = 123print(a)123 --------------------------- ... 
- Private Variable and Private Method - Python 私有变量 和 私有方法
		Private Variable and Private Method Python 不象 Java 那样, 通过 private 关键字创建私有属性, python 通过更简洁的实现了'私有属性', ... 
- Python私有变量
		# 访问限制的保护,代码更加健壮 class Student(object): def __init__(self,name,score): self.__name= name self.__scor ... 
- python私有变量的分类
- Python私有变量(Private Variable)
		Variables can be private which can be useful on many occasions. A private variable can only be chang ... 
- python 私有和保护成员变量如何实现?——  "单下划线 " 开始的成员变量叫做保护变量,意思是只有类实例和子类实例能访问到这些变量;" 双下划线 " 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据
		默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量.在python中定义私有变量只需要在变量 ... 
随机推荐
- MYSQL—— char 与 varchar的区别!
			一.char 和 varchar 的区别: 1)取值范围: char:取值范围:0~255 varchar:取值范围:0~65535 2)空间占用与速度: char: 定长字符串,占用空间大,速度快, ... 
- keras实现简单CNN人脸关键点检测
			用keras实现人脸关键点检测 改良版:http://www.cnblogs.com/ansang/p/8583122.html 第一步:准备好需要的库 tensorflow 1.4.0 h5py ... 
- python接口自动化(十九)--Json 数据处理---实战(详解)
			简介 上一篇说了关于json数据处理,是为了断言方便,这篇就带各位小伙伴实战一下.首先捋一下思路,然后根据思路一步一步的去实现和实战,不要一开始就盲目的动手和无头苍蝇一样到处乱撞,撞得头破血流后而放弃 ... 
- 【推荐】.NETCore 简单且高级的库 csredis v3.0.0
			前言 .NETCore 从1.0发布历经坎坷,一开始各种库缺失到现在的部分完善,走到今天实属不易. 比如 redis-cli SDK 简直是坑出不穷. 过去 .net 最有名望的 ServiceSta ... 
- 带你找到五一最省的旅游路线【dijkstra算法推导详解】
			前言 五一快到了,小张准备去旅游了! 查了查到各地的机票 因为今年被扣工资扣得很惨,小张手头不是很宽裕,必须精打细算.他想弄清去各个城市的最低开销. [嗯,不用考虑回来的开销.小张准备找警察叔叔说自己 ... 
- layui,返回的数据不符合规范,正确的成功状态码 (code) 应为:0
			在使用layui的数据表格绑定数据的时候,出现的一些问题, "返回的数据不符合规范,正确的成功状态码 (code) 应为:0" 之后在网上也查找的了许多的资料,也去看了官网的文档 ... 
- Smobiler Service是什么?(Smobiler——.NET移动开发平台)
			在得知Smobiler即将推出新产品SmobilerService之后,许多人第一个疑问便是——Smobiler Service是什么? Smobiler的开发者对这个exe窗口一定不陌生,有时候因为 ... 
- 第15章 时间常数字符串比较 - IdentityModel 中文文档(v1.0.0)
			在比较安全上下文中的字符串(例如比较键)时,应尽量避免泄漏时序信息. 该TimeConstantComparer类可以帮助: var isEqual = TimeConstantComparer.Is ... 
- IdentityModel 中文文档(v1.0.0) 目录
			欢迎使用IdentityModel文档! 第一部分 协议客户端库 第1章 发现端点(Discovery Endpoint) 第2章 授权端点(Authorize Endpoint) 第3章 结束会话端 ... 
- [PHP]引用返回与节省内存
			PHP中的引用是什么:1.在 PHP 中引用意味着用不同的名字访问同一个变量内容2.引用可以被看作是 Unix 文件系统中的硬链接. 3.使用unset的话,只是删除他这个名字自身对内容的引用,并没有 ... 
