需要记住的tip
即类似于private和public的意思,即可以隐藏一些不想公开的属性和函数。
需要使用到"__"双下滑线,双下划线是强制private
而" _ "单下划线,单下划线是标记private,没有实际作用,但对于程序员来说起到约束作用
下面详细说下
首先看例子:定义一个类,里面包含两个属性,先定义一个可以被外界访问的类,再定义不能被外界访问的类
能被外界访问的类
class Student1(object):
def __init__(self,name,age):
self.name=name
self.age=age
def print_info(self):
print("name=%s,age=%s" %(self.name,self.age))
xiaoming=Student('xiaoming','18')
xiaoming.print_info()
print(xiaoming.name,xiaoming.age)
欧了,我们来看下实际示例:
可见,我们可以通过实例instance:xiaoming去直接调用里面的变量
xiaoming.name 、xiaoming.age
下面定义一个不能被外界访问的类
class Student2(object):
def __init__(self,name,age):
self.__name=name
self.__age=age
def print_info(self):
print('name=%s,age=%s' %(self.__name,self.__age))
xiaohong=Student2('xiaoming','6')
xiaohong.print()
print(xiaohong.__name,xiaohong.__age)
请看具体示例
发现报错了
提示找不到" __name "的属性,其实意思就是经过了" __ "定义的属性,只能在类中访问,外界不能再访问了
这样就确保了外部代码不能随意修改对象内部的状态,这样通过访问限制的保护,代码更加健壮
如果想在外界再调用这些属性的的话,只需要单独在定义get、set方法即可
说几个注意点:
在Python中,变量名类似__xxx__
的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用__name__
、__score__
这样的变量名。
最后注意下面的这种错误写法:
这个示例通过
xiaohong.__name
对name属性做了更改,虽然能够运行,但是实际上并不是将内部的__name属性做了更改,而是创建了一个新的变量,实际上原来的属性已经变成了_Student2__name
这个属性了,所以这个写法不建议使用。
总结:
记住_、__
的用法即可