python学习笔记(十二)---访问限制

2023-11-11

私有变量
Python的私有变量表示形式__xx(两道下划线),只有内部可以访问,外部不能访问

class Student(object):
	def __init__(self,name,score):
		self.__name=name
		self.__score=score
	def printName(self):
		print('name:',self.__name)
	def printScore(self):
		print('score:',self.__score)


stu=Student('Bob',90)
stu.printName()
stu.printScore()
print(stu.__name)

报错

AttributeError: 'Student' object has no attribute '__name'

注意:变量名前后各两道下划线__xx__是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用__name__、__score__这样的变量名。

如果我们尝试在外部修改__name变量

stu=Student('Bob',90)
stu.__name='Jack'
stu.printName()
stu.printScore()
name: Bob
score: 90

结果并没有改变,其实我们并没有改变内部的__name变量,而是在外部又增加了一个__name变量。可是这两个变量不会重名吗?实际上,Python解释器对外把__name变量改成了_Student__name。仍然可以通过_Student__name来访问内部的__name变量。这说明双下划线开头的实例变量其实可以从外部访问:

stu=Student('Bob',90)
stu._Student__name='Jack'
stu.printName()
stu.printScore()
name: Jack
score: 90

但是强烈建议你不要这么干,因为不同版本的Python解释器可能会把__name改成不同的变量名。

总的来说就是,Python本身没有任何机制阻止你干坏事,一切全靠自觉。

如果外部代码要获取name和score,可以给Student类增加getName和getScore这样的方法:

class Student(object):
	       ...
	def getName(self):
		return self.__name
	def getScore(self):
		return self.__score

如果要允许外部代码修改score,可以再给Student类增加setScore方法:

class Student(object):
		  
		    ...
		    
	def setScore(self,score):
		self.__score=score


stu=Student('Bob',90)
stu.setScore(100)
stu.printName()
stu.printScore()
name: Bob
score: 100

你也许会问,原先那种直接通过stu.score = 99也可以修改啊,为什么要定义一个方法大费周折?因为在方法中,可以对参数做检查,避免传入无效的参数:

	def setScore(self,score):
		if 0<=score<=100:
		 self.__score=score
		else:
		 raise ValueError('bad score')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python学习笔记(十二)---访问限制 的相关文章

随机推荐

  • VScode 结合Global构建linux源代码阅读环境

    1 背景介绍 上一篇文章 VScode ssh远程登陆到服务器阅读代码 介绍了在VSCode工具中使用SSH远程登陆服务器加载Linux源代码 本文向大家介绍使用Global构建linux源代码阅读环境 对linux kernel代码进行解
  • H.264 入门篇 - 07 (帧间预测 - 解码图像缓存 DPB)

    目录 1 DPB 的概念 2 DPB 最大深度 3 DPB 的行为 3 1 清空机制 3 2 内存分配过大 3 3 内存分配不足 前置文章 VideoCodec 入门篇 00 编解码简介 H 264 入门篇 00 简介 H 264 入门篇
  • bash: setenv: command not found

    报错现象 解决方法 Shell 版本不同 setenv 是CSH 命令 BASH无法解释 不过BASH 有对应的命令 CSH setenv name value BASH export name value CSH unsetenv nam
  • 大数据 zookeeper-api应用+分布式应用系统服务器上下线动态感知程序开发

    测试过程中使用到的源码https download csdn net download zhou920786312 10871105 1zookeeper api应用 org apache zookeeper Zookeeper是客户端入口
  • 水利灌区信息化的组成和在施工中的注意事项

    在社会不断发展 经济持续提升的今天 灌区水利信息化建设的步伐也更加紧迫 为了能够更好的满足时代发展需求 灌区信息化组成与施工成为了当前社会所关注的热点问题 明确灌区水利信息化组成 以及施工的注意事项 对落实和普及我国灌区水利信息化有着巨大的
  • HDMI接口之HPD(热拔插)

    HDMI Pin 19 DVI Pin16 的功能是热插拔检测 HPD 这个信号将作为HDMI 源端 Source 是否发起EDID读 是否开始发送TMDS信号的依据 HPD是从HDMI显示器端 Sink 生成并输出送往HDMI 源端 So
  • mock+vuex+axios利用token实现用户登录验证

    思路 mock模拟用户数据 axios请求接口 router中进行needLogin的判断 true为需要登录才能进入此页面 vuex中 将在login vue中获取的用户名和密码进行验证 验证后 拿到token和usertitle 将to
  • layui 手风琴折叠

    效果图 1 引入文件 注意 文件的位置不一样 引入的路径也不同 2 编写div样式 div style width 100 div class layui collapse div class layui c div div div
  • 快速排序一趟后结果

    题目 原序列 20 18 22 16 30 19 以20为基准 写出一趟排序后结果 话不多说 直接上图 方法 1 找出比基准小的部分和大的部分 分成两部分 并确定基准的位置 比20小 18 16 19 比20大 22 30 所以20应是第四
  • STM32cubemx教程及STM32入门(五)IIC

    STM32cubemx教程及STM32入门 五 IIC 2022 8 25 前言 本章主要讲解IIC协议以及stm32cubemx配置和HAL库函数 简介 I2C Inter Integrated Circuit 内部集成电路 总线是一种由
  • matlab自带数据集

    matlab深度学习自带数据库 最近在学matlab神经网络工具箱的相关知识 在构建神经网络时不可避免的要用到数据集 以此文来记录一下matlab一些自带的数据集 可以直接在命令窗口通过load dataset嵌入工作区 具体有哪些数据集可
  • 【云原生】Docker 架构及工作原理

    一 Docker 概述 二 Client 客户端 三 Docker 引擎 四 Image 镜像 五 Container 容器 六 镜像分层 可写的容器层 七 Volume 数据卷 八 Registry 注册中心 九 总结 一 Docker
  • 方舟服务器数据修改,《方舟:生存进化》官方反悔 清除服务器数据计划作废...

    方舟 生存进化 官方反悔 清除服务器数据计划作废 2017 07 20 10 33 14来源 游戏下载编辑 嘉文四世评论 0 据外媒Kotaku报道 方舟 生存进化 开发商Wildcard此前计划在游戏正式版推出时 清空所有官方服务器数据
  • pikachu靶场之暴力破解

    一 基于表单的暴力破解 和DVWA的Low级一样 不在详细做 二 验证码绕过 on server 抓包 经过在repeater模块下测试 验证码可一直有效 担这只限于pikachu这个靶场 发送至intruder模块 为变量1添加字典 为变
  • Ubuntu18.04 install Vulkan SDK

    Vulkan SDK can be downloaded from https vulkan lunarg com sdk home Alternatively it can be installed by using the distri
  • requests.exceptions.SSLError: HTTPSConnectionPool用python挂代理爬国外网站报错

    我想要爬取国外网站信息 但是由于需要长时间挂梯子进行一些交互 因此用python爬取数据时就会报以下错误 我找了好多解决办法 但大多数都不是由于挂代理而引起的 这里我只针对挂代理进行爬取而出现这种报错提供一个解决方法 在代码里加入协议改一下
  • histogram loss笔记

    histogram loss 1 用来做 embedding learning 思路是最小化 negative pair 相似性比 positive pair 还大的可能性 概率 其中相似性用 embeddings 的内积表示 s i j
  • 快排优化---双轴快排(基于JAVA源码)---C++实现

    随机选轴 降低原始数据排列的影响 void getTwoRandomNum vector
  • 地图行业国家标准汇总

    国家标准全文公开系统是国家标准的在线查询系统 搜索关键字地图 可获得地图行业全部国家标准GB
  • python学习笔记(十二)---访问限制

    私有变量 Python的私有变量表示形式 xx 两道下划线 只有内部可以访问 外部不能访问 class Student object def init self name score self name name self score sc