首先我们这里先描述下:
  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 私有变量的访问和赋值的更多相关文章

  1. 关于 私有变量的访问问题【 java python]

    #coding:utf-8 class Teacher(): __clas = '' # 类私有变量同样遵循,只能在类内部访问,外部无法访问,但是类的方法可以访问同类所有对象私有变量这个规则. def ...

  2. Python 私有变量中两个下划线 _ _item 与 一个下划线的区别 _item

    python中没有常量的说法, 但是可以通过元组实现一个常量 在python的私有变量中, 存在两个下划线 _ _item 与一个下划线 _item 的区别 前面带两个下划线的私有变量: 只能在本类中 ...

  3. [python] 私有变量和私有方法

    1.在Python中要想定义的方法或者变量只在类内部使用不被外部调用,可以在方法和变量前面加 两个 下划线 #-*- coding:utf-8 -*- class A(object): name = ...

  4. python day1 变量的命名和赋值

    变量 一.变量的命名 1.不能以数字进行开头 2.不能包含特殊字符 3.不能是python内部的某些关键字 a = 123print(a)123 --------------------------- ...

  5. Private Variable and Private Method - Python 私有变量 和 私有方法

    Private Variable and Private Method Python 不象 Java 那样, 通过 private 关键字创建私有属性, python 通过更简洁的实现了'私有属性', ...

  6. Python私有变量

    # 访问限制的保护,代码更加健壮 class Student(object): def __init__(self,name,score): self.__name= name self.__scor ...

  7. python私有变量的分类

  8. Python私有变量(Private Variable)

    Variables can be private which can be useful on many occasions. A private variable can only be chang ...

  9. python 私有和保护成员变量如何实现?—— "单下划线 " 开始的成员变量叫做保护变量,意思是只有类实例和子类实例能访问到这些变量;" 双下划线 " 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据

    默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量.在python中定义私有变量只需要在变量 ...

随机推荐

  1. 初探机器学习之使用讯飞TTS服务实现在线语音合成

    最近在调研使用各个云平台提供的AI服务,有个语音合成的需求因此就使用了一下科大讯飞的TTS服务,也用.NET Core写了一个小示例,下面就是这个小示例及其相关背景知识的介绍. 一.什么是语音合成(T ...

  2. 面试官,你再问我 Bit Operation 试试?

    在面试环节中,面试官很喜欢问一些特别的题目,这些题目有着特殊的解法,如果回答的巧妙往往能在面试中加分. 在这些题目中,位操作(Bit Operation)就是极具魅力的一种.今天,吴师兄就来分享 Le ...

  3. Jenkins忘记admin密码处理方法

    1.先找到enkins/config.xml文件,并备份. 此文件位于Jenkins系统设置的主目录,根据自己的配置情况而定.我的位置如下 /data/temp/jenkins/config.xml2 ...

  4. 理解css之position属性

    之前css学的一直不精致而且没有细节,为了成为一个完美的前端工作人员,所以决定重新学习css的属性.当然会借鉴MDZ文档(MDZ文档)或其他博主的经验来总结.在这里会注明借鉴或引用文章的出处.侵权即删 ...

  5. GIS中的坐标系【Esri官方文档部分翻译】

    GCS 地理坐标系(GCS)使用椭圆体表面来定义地球上的位置.地理坐标系有三个部分: 基准面,是地球的椭圆体(椭球体)模型 本初子午线 角度单位 常见基准包括WGS84(用于GPS)和NAD83(用于 ...

  6. 学习ELk之----02. Elastic Search操作入门

    我们将使用Postman来进行日志写入操作.Postman的下载地址,你可以Google一下. 1. 在上一节中,我们启动完成ELK的Docker后,可以在浏览器中打开:http://192.168. ...

  7. ORA-39127: 调用 "WMSYS"."LT_EXPORT_PKG"."SCHEMA_INFO_EXP" 时发生意外错误

    expdp 告警提示: Export: Release 11.2.0.4.0 - Production on 星期日 4月 28 12:14:51 2019....ORA-39127: 调用 &quo ...

  8. SQL内模糊查询语句拼接时单引号'问题

    下面以存储过程查询所有为例,非存储过程(或不是查询所有将*替换为你想要查询的列即可)更为简单, 语法:select * from 表名 where 列名like'%条件%' 拼接后的set @变量名 ...

  9. SQL server 表信息查询

    一.查看所有表的行数select a.name as '表名',b.rows as '表数据行数'from sysobjects a inner join sysindexes bon a.id = ...

  10. windows远程桌面神器

    近需要远程家庭版的WINDOWS系统的笔记本,发现它竟然没有远程桌面功能,系统属性下面根本没有远程桌面选项. 于是上网搜解决方案,找到下面这个神器,名字叫RDPwrap,不但能开通Vista以后任何版 ...