Python中类的变量,一会一个下划线一会两个下划线,到底有什么区别?

三种类型

下划线与变量的组合一共有以下三种情况,搞清楚他们之间的关系会很有帮助!

形似 功能
__xx 这是私有变量, 只有内部可以访问,外部不可以访问。但是也不是一定不可以访问,只是解释器把该变量解释成 _类名__xx 。但最好不要这样做,养成良好编程习惯
_x 这是实例变量,可以访问,但是不要轻易访问。按照约定俗成,当你看到这样的变量时,意思就是,“虽然我可以被访问,但请把我视为私有变量,不要随意访问”。
__xx__ 这是特殊变量。特殊变量是可以直接访问的,不是private变量。我们自己最好不要定义这样的变量。可以通过特殊变量查询一些信息,如__name__可以判断本模块是被引用的还是正在当程序运行。

代码演示

运行截图

Python中类的变量,一会一个下划线一会两个下划线,到底有什么区别?_第1张图片

代码

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实例能添加的属性:

你可能感兴趣的:(python,python,私有变量,特殊变量,下划线,类)