python 面向对象三 访问权限 下划线 双下划线
2018-06-17 23:54:58来源:未知 阅读 ()
一、双下划线
如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__
,在Python中,实例的变量名如果以__
开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问。
双下划线开头的实例变量是不是一定不能从外部访问呢?其实也不是。不能直接访问__name
是因为Python解释器对外把__name
变量改成了_Student__name
,所以,仍然可以通过_Student__name
来访问__name
变量。
外部代码可以设置了__name
变量,但实际上这个__name
变量和class内部的__name
变量不是一个变量!内部的__name
变量已经被Python解释器自动改成了_Student__name
,而外部代码给实例新增了一个__name
变量。
1 >>> class Student(object): 2 ... def __init__(self, name): 3 ... self.__name = name 4 ... def get_name(self): 5 ... return self.__name 6 ... def set_name(self, name): 7 ... self.__name = name 8 ... 9 >>> st = Student('Jack') 10 >>> st.get_name() 11 'Jack' 12 >>> st.set_name('Mike') 13 >>> st.get_name() 14 'Mike' 15 >>> dir(st) 16 ['_Student__name', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'get_name', 'set_name'] 17 >>> st.__name 18 Traceback (most recent call last): 19 File "<stdin>", line 1, in <module> 20 AttributeError: 'Student' object has no attribute '__name' 21 >>> st._Student__name 22 'Mike' 23 >>> st.__name = 'New' # 给实例新添加了一个变量 24 >>> st.__name 25 'New' 26 >>> st._Student__name 27 'Mike'
二、单下划线
有些时候,你会看到以一个下划线开头的实例变量名,比如_name
,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。
1 >>> class Student(object): 2 ... def __init__(self, name): 3 ... self._name = name 4 ... 5 >>> st = Student('Jack') 6 >>> st._name 7 'Jack'
三、特殊变量
双下划线开头,并且以双下划线结尾的变量,特殊变量是可以直接访问的,不是private变量。
1 >>> class Student(object): 2 ... def __init__(self, name): 3 ... self.__name = name 4 ... def get_name(self): 5 ... return self.__name 6 ... 7 >>> st = Student('Jack') 8 >>> st.get_name() 9 'Jack' 10 >>> st.__init__('Mike') 11 >>> st.get_name() 12 'Mike'
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:集合
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash