- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章一篇文章教会你Python访问限制那些事儿由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1、前言 。
在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑.
2、案例分析 。
以Teacher类的定义来看,外部代码还是可以自由地修改一个实例的name、score属性.
class Teacher(object): 。
。
def __init__(self, name, score): 。
self.name = name 。
self.score = score 。
。
def print_score(self): 。
print('%s: %s' % (self.name, self.score)) 。
。
def get_grade(self): 。
if self.score >= 90: 。
return 'A' 。
elif self.score >= 60: 。
return 'B' 。
else: 。
return 'C' 。
。
。
bart = Teacher('Bart Simpson', 98) 。
lisa = Teacher('Lisa Simpson', 87) 。
。
bart.score = 59 。
print(bart.score) 。
。
print('bart.score =', bart.score) 。
运行结果:
如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线.
在Python中,实例的变量名如果以开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问,所以,Teacher把Teacher类改一改:
class Teacher(object): 。
def __init__(self, name, score): 。
self.__name = name 。
self.__score = score 。
def print_score(self): 。
print('%s: %s' % (self.__name, self.__score)) 。
改完后,对于外部代码来说,没什么变动,但是已经无法从外部访问实例变量.name和实例变量.score了:
bart = Teacher('Bart Simpson', 98) 。
print(bart.__name) 。
。
注:
就确保了外部代码不能随意修改对象内部的状态,这样通过访问限制的保护,代码更加健壮.
但是如果外部代码要获取name和score怎么办?可以给Teacher类增加get_name和get_score这样的方法:
class Teacher(object): 。
def get_name(self): 。
return self.__name 。
def get_score(self): 。
return self.__score 。
如果又要允许外部代码修改score怎么办?可以再给Teacher类增加set_score方法.
class Teacher(object): 。
def set_score(self, score): 。
self.__score = score 。
原先那种直接通过bart.score = 59也可以修改啊,为什么要定义一个方法大费周折?因为在方法中,可以对参数做检查,避免传入无效的参数:
class Teacher(object): 。
def set_score(self, score): 。
if 0 <= score <= 100: 。
self.__score = score 。
else: 。
raise ValueError('bad score') 。
在Python中,变量名类似xxx的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用name、score这样的变量名.
Teacher会看到以一个下划线开头的实例变量名.
比如_name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当Teacher看到这样的变量时.
print(bart._Teacher__name) 。
。
代码解析:
双下划线开头的实例变量是不是一定不能从外部访问呢?其实也不是。不能直接访问name是因为Python解释器对外把name变量改成了_Teacher_name.
所以,仍然可以通过_Teacher_name来访问__name变量.
“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”.
3、总结 。
本文基于Python基础。介绍了在类中,变量访问限制。通过案例的分析,在实际应用需要注意的点,遇到的问题,提供有效的解决方案.
欢迎大家积极尝试,有时候看到别人实现起来很简单,但是到自己动手实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻.
使用Python语言,能够让读者更好的理解。代码很简单,希望对你学习有帮助.
原文地址:https://mp.weixin.qq.com/s/GeDC-BlX-8IGiJIcz5agtg 。
最后此篇关于一篇文章教会你Python访问限制那些事儿的文章就讲到这里了,如果你想了解更多关于一篇文章教会你Python访问限制那些事儿的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我是一名优秀的程序员,十分优秀!