python学习笔记-tip35(访问限制)

需要记住的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这个属性了,所以这个写法不建议使用。

总结:

记住_、__的用法即可

你可能感兴趣的:(python学习笔记-tip35(访问限制))