zoukankan      html  css  js  c++  java
  • python之访问限制

    在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。

    从Student类的定义来看,外部代码还是可以自由地修改一个实例的namescore属性

    # class Student(object):
    #     def __init__(self,name,score,ww):
    #         self.name=name
    #         self.score=score
    #         self.ww=ww
    #     def prins(self):
    #         print('%s:%s:%s'%(self.name,self.score,self.ww))
    # bart=Student('wang',99,'yiban')  #输入实例
    # bart.name='zhang'#将实例中的wang改为zhang
    # bart.prins()

    如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问

    # class Student(object):
    #     def __init__(self,name,score,ww):
    #         self.__name=name
    #         self.__score=score
    #         self.__ww=ww
    #     def prins(self):
    #         print('%s:%s:%s'%(self.__name,self.__score,self.__ww))
    # bart=Student('wang',99,'yiban')
    # bart.__name='zhang'  #虽然可以运行但不是self.__name=name
     # bart.prins()

     如果要修改实例的内容可以在类中写一个方法

    # class Student(object):
    #     def __init__(self,name,score,ww):
    #         self.__name=name
    #         self.__score=score
    #         self.__ww=ww
    #     def prins(self):
    #         print('%s:%s:%s'%(self.__name,self.__score,self.__ww))
    #     def cc(self,gg):
    #         self.__name=gg
    # bart=Student('wang',99,'yiban')
    # bart.cc('zhang')
    # bart.prins()

     _name是因为Python解释器对外把__name变量改成了_Student__name,所以,仍然可以通过_Student__name来访问__name变量。

    但是强烈建议你不要这么干,因为不同版本的Python解释器可能会把__name改成不同的变量名

  • 相关阅读:
    Linux搭建ldap前的准备工作
    samba配置文件帮助以及selinux配置
    rpcbind服务引起的nfs链接报错
    Linux中的inode
    hdu3974 Assign the task线段树 dfs序
    HDU1540线段树维护连续子区间
    2020牛客NOIP赛前集训营-提高组(第一场)C 牛牛的最大兴趣组
    Golang字符串是否存在于切片或数组中的小工具(基本等同于python in语法)
    快速修改MySQL数据库名称
    CPU利用率高,如何排查?
  • 原文地址:https://www.cnblogs.com/wbf980728/p/14074839.html
Copyright © 2011-2022 走看看