python前后两个下划线_Python中一个下划线_和两个下划线__的区别
通常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中一个下划线_和两个下划线__的区别相关推荐
- python怎么打出长下划线_Python 中的各种下划线操作你了解吗?
原标题:Python 中的各种下划线操作你了解吗? 我们在定义一些变量或者方法的时候,常常会用到下划线.在 Python 中,下划线的出镜率非常高,比如变量,有些是一个下划线开头的(_xx),有些是两 ...
- python中常见的双下方法_python中常见的双下方法_python面向对象(5)__特殊双下方法...
双下方法 双下方法是开发python这个语言程序员用的,源码中使用的. 我们不能轻易使用双下方法.可能重新写object的源码,慎用!!! 双下方法特征:你不知道干啥了,就会触发某个双下方法 len ...
- python中os.path.join()的循环用法_Python中.join()和os.path.join()两个函数的用法详解
Python中有.join()和os.path.join()两个函数,具体作用如下: . join(): 连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符)连接生成一个新的字符串 ...
- python中一个等于号和两个等于号_Python中is与双等于号“==”的区别
Python有两个用于相等比较的运算符,"is"和"=="(等于).在这篇文章中,我将带你们了解Python中"is"和"==&q ...
- python json模块有什么用_Python中json模块与jsonpath模块的区别是什么
Python中json模块与jsonpath模块的区别是什么 发布时间:2021-02-02 11:15:52 来源:亿速云 阅读:94 作者:小新 这篇文章主要介绍了Python中json模块与js ...
- python里的shell是什么_python中的shell操作
http://blog.csdn.net/meng_tianshi/article/details/6682317 首先介绍一个函数: os.system(command) 这个函数可以调用shell ...
- python函数库分类及实例_Python中Scikit-Learn库的分类方法总览
译者丨野生大熊猫 https://mp.weixin.qq.com/s/hmNKdM3pA3Mq9vq0TQXgOg 简介 你是一个正在进入机器学习领域的Python程序员吗? 掌握Scikit-Le ...
- python语言编程是什么意思_python中的“//”是什么意思
python中的"//"是什么意思 发布时间:2020-07-01 18:34:45 来源:亿速云 阅读:383 python中的"//"是什么意思?很多新手对 ...
- python round(1234.5678、-2)_Python中你不知道的特性
内置函数print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) 本函数是实现对象以字符串表示的方式格式化输出到流文件对象fil ...
最新文章
- mapreduce介绍
- 抓取html的内容,js获取网页选中内容(包含html代码)
- verilog 8位流水灯_用单片机控制的LED流水灯设计
- when is oPropagatedProperties of detail view being generated
- centos 管道符取第一行_Linux用户组管理及用户权限及管道符应用
- Jsoup代码解读之一-概述
- 职业经理人-授权后才是管理的开始
- Qt - QVariant
- C#中winform使用相对路径读取文件的方法
- 如何在IE浏览器中引入本地字体文件
- python回文字符串编程_P086 回文字符串
- echarts地图列表_Echarts 地图生成
- Turtlebot2激光雷达(Rplidar)gmapping构建地图
- 综合项目之闪讯破解(一)之 闪讯拨号用户名核心算法
- 解决雷神笔记本风扇声音太响太吵问题
- 3d渲染是显示计算机内存不足,win10系统使用3d渲染图片出现内存不足如何解决
- 添加系统报警短信或邮箱 需要集中配置
- mongo 登陆_MongoDB 账号密码登录
- “五小”成果技术报告 野外小队信息管理系统Ver1.00
- python全唐诗json文件基于作者姓名检索--以李白为例