三种类型
下划线与变量的组合一共有以下三种情况,搞清楚他们之间的关系会很有帮助!
形似 | 功能 |
---|---|
__xx | 这是私有变量, 只有内部可以访问,外部不可以访问。但是也不是一定不可以访问,只是解释器把该变量解释成 _类名__xx 。但最好不要这样做,养成良好编程习惯 |
_x | 这是实例变量,可以访问,但是不要轻易访问。按照约定俗成,当你看到这样的变量时,意思就是,“虽然我可以被访问,但请把我视为私有变量,不要随意访问”。 |
__xx__ | 这是特殊变量。特殊变量是可以直接访问的,不是private变量。我们自己最好不要定义这样的变量。可以通过特殊变量查询一些信息,如__name__可以判断本模块是被引用的还是正在当程序运行。 |
代码演示
运行截图
代码
class Student(object):
def __init__(self,name,score):
self._name=name
self.__score=score
def get_info(self):
print("%s的成绩为%s" %(self._name,self.__score))
#定义一个学生类
lisa=Student('lisa',99) #给出一个lisa实例
lisa.get_info() #通过内部访问变量
lisa._name #验证该变量可以访问
lisa._Student__score #变形的访问私有变量方式,上文有说做好不要这样坐
lisa.__score #验证无法直接访问
常见的特殊变量
1.__name__
一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。
2.__all__
python模块中的__all__,可用于模块导入时限制,如:
from module import *
此时被导入模块若定义了__all__属性,则只有__all__内指定的属性、方法、类可被导入。若没定义,则导入模块内的所有公有属性,方法和类 。
3.__file__
文件所在的路径
4.__slots__
Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class实例能添加的属性: