通常Python类中会有_和__的方法,是指什么意思呢?如下:

__表示内部不允许访问,_表示这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。

双下划线开头的实例变量是不是一定不能从外部访问呢?其实也不是。不能直接访问__name是因为Python解释器对外把__name变量改成了_student__name,所以,仍然可以通过_student__name来访问__name变量

具体看下面例子就知道了

class student(object):

def __init__(self, age, name):

self.__age = age

self.__name = name

def set_name(self, name):

self.__name = name

def get_name(self):

return self.__name

def set_age(self, age):

return self.__age

def get_age(self):

self.__age = age

if __name__ == '__main__':

name = "JackMa"

age = 47

stu = student(age, name)

print("第一次赋值后stu的名字:{}".format(stu.get_name())) # 获取name

stu.__name = "Lucy" # 错误方式,表面上看,外部代码“成功”地设置了__name变量,但实际上这个__name变量和class内部的__name变量不是一个变量!内部的__name变量已经被Python解释器自动改成了_Student__name,而外部代码给bart新增了一个__name变量。

print("错误方式赋值stu.__name = 'Lucy'后查看stu.__name:{}".format(stu.__name))

print("错误方式赋值stu.__name = 'Lucy'后查看stu.get_name:{}".format(stu.get_name()))

print("错误方式赋值stu.__name = 'Lucy'后查看stu._student__name:{}".format(stu._student__name))

输出是:

第一次赋值后stu的名字:JackMa

错误方式赋值stu.__name = 'Lucy'后查看stu.__name:Lucy

错误方式赋值stu.__name = 'Lucy'后查看stu.get_name:JackMa

错误方式赋值stu.__name = 'Lucy'后查看stu._student__name:JackMa

Ref:

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318650247930b1b21d7d3c64fe38c4b5a80d4469ad7000

python前后两个下划线_Python中一个下划线_和两个下划线__的区别相关推荐

  1. python怎么打出长下划线_Python 中的各种下划线操作你了解吗?

    原标题:Python 中的各种下划线操作你了解吗? 我们在定义一些变量或者方法的时候,常常会用到下划线.在 Python 中,下划线的出镜率非常高,比如变量,有些是一个下划线开头的(_xx),有些是两 ...

  2. python中常见的双下方法_python中常见的双下方法_python面向对象(5)__特殊双下方法...

    双下方法 双下方法是开发python这个语言程序员用的,源码中使用的. 我们不能轻易使用双下方法.可能重新写object的源码,慎用!!! 双下方法特征:你不知道干啥了,就会触发某个双下方法 len ...

  3. python中os.path.join()的循环用法_Python中.join()和os.path.join()两个函数的用法详解

    Python中有.join()和os.path.join()两个函数,具体作用如下: . join():    连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符)连接生成一个新的字符串 ...

  4. python中一个等于号和两个等于号_Python中is与双等于号“==”的区别

    Python有两个用于相等比较的运算符,"is"和"=="(等于).在这篇文章中,我将带你们了解Python中"is"和"==&q ...

  5. python json模块有什么用_Python中json模块与jsonpath模块的区别是什么

    Python中json模块与jsonpath模块的区别是什么 发布时间:2021-02-02 11:15:52 来源:亿速云 阅读:94 作者:小新 这篇文章主要介绍了Python中json模块与js ...

  6. python里的shell是什么_python中的shell操作

    http://blog.csdn.net/meng_tianshi/article/details/6682317 首先介绍一个函数: os.system(command) 这个函数可以调用shell ...

  7. python函数库分类及实例_Python中Scikit-Learn库的分类方法总览

    译者丨野生大熊猫 https://mp.weixin.qq.com/s/hmNKdM3pA3Mq9vq0TQXgOg 简介 你是一个正在进入机器学习领域的Python程序员吗? 掌握Scikit-Le ...

  8. python语言编程是什么意思_python中的“//”是什么意思

    python中的"//"是什么意思 发布时间:2020-07-01 18:34:45 来源:亿速云 阅读:383 python中的"//"是什么意思?很多新手对 ...

  9. python round(1234.5678、-2)_Python中你不知道的特性

    内置函数print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) 本函数是实现对象以字符串表示的方式格式化输出到流文件对象fil ...

最新文章

  1. mapreduce介绍
  2. 抓取html的内容,js获取网页选中内容(包含html代码)
  3. verilog 8位流水灯_用单片机控制的LED流水灯设计
  4. when is oPropagatedProperties of detail view being generated
  5. centos 管道符取第一行_Linux用户组管理及用户权限及管道符应用
  6. Jsoup代码解读之一-概述
  7. 职业经理人-授权后才是管理的开始
  8. Qt - QVariant
  9. C#中winform使用相对路径读取文件的方法
  10. 如何在IE浏览器中引入本地字体文件
  11. python回文字符串编程_P086 回文字符串
  12. echarts地图列表_Echarts 地图生成
  13. Turtlebot2激光雷达(Rplidar)gmapping构建地图
  14. 综合项目之闪讯破解(一)之 闪讯拨号用户名核心算法
  15. 解决雷神笔记本风扇声音太响太吵问题
  16. 3d渲染是显示计算机内存不足,win10系统使用3d渲染图片出现内存不足如何解决
  17. 添加系统报警短信或邮箱 需要集中配置
  18. mongo 登陆_MongoDB 账号密码登录
  19. “五小”成果技术报告 野外小队信息管理系统Ver1.00
  20. python全唐诗json文件基于作者姓名检索--以李白为例

热门文章

  1. CS08 用户服务工程师(青岛)
  2. 个人博客系统毕业设计开题报告
  3. 数据库安全之数据掩码:SQL新功能之动态数据掩码(SQL2016AZURE SQL)
  4. spring boot 中文文档地址
  5. 马斯克在推特暗示将亲自负责一款社交媒体App开发
  6. 小米公寓,年轻人的第一套公寓?回应来了
  7. 蚂蚁之江要退地?官方回应:假的
  8. 爆料者称苹果仍在继续研发iPhone屏下Touch ID
  9. 微信深色模式最大的槽点终于被干掉了,这一次安卓用户先享受!
  10. 罗永浩宣布要做带货一哥后,合作单子如雪花般飞来