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改成不同的变量名

  • 相关阅读:
    【剑指Offer面试编程题】题目1504:把数组排成最小的数--九度OJ
    【剑指Offer面试编程题】题目1373:整数中1出现的次数--九度OJ
    【剑指Offer面试编程题】题目1372:最大子向量和--九度OJ
    【剑指Offer面试编程题】题目1371:最小的K个数--九度OJ
    vue路由传参
    Es5.Es6区别
    面向对象和面向过程
    vuex
    Vue脚手架使用
    vue中fetch请求
  • 原文地址:https://www.cnblogs.com/wbf980728/p/14074839.html
Copyright © 2011-2022 走看看