小标
2018-08-09
来源 :
阅读 1493
评论 0
摘要:本文主要向大家介绍了Python语言之python 面向对象三 访问权限 下划线 双下划线,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。
本文主要向大家介绍了Python语言之python 面向对象三 访问权限 下划线 双下划线,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。
一、双下划线
如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在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 "
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'
本文由职坐标整理并发布,希望对同学们学习Python有所帮助,更多内容请关注职坐标编程语言Python频道!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号