zoukankan      html  css  js  c++  java
  • python变量前的单下划线(私有变量)和双下划线()

    1.单下划线

    变量前的单下划线表示表面上私有 ,但是其实这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。

    2.双下划线

    变量前的双下划线表示真正的私有,实际上的私有,只有内部可以访问,外部不能访问 

    但是有窍门,可以在类里面增加get__namededeset__namedede这样的方法来突破限制,而且还能在方法里做验证。

    3.其他(如:init):

    名称前后的双下划线是一种惯例,对Python系统来说,这将确保不会与用户自定义的名称冲突。通常,你将会覆写这些方法,并在里面实现你所需要的功能,以便Python调用它们。例如,当定义一个类时,你经常会覆写“init”方法

    总结:

    前面单下划线 _var 变量所在模块/类以外的地方也能访问该变量,但最好不要
    前面双下划线 __privateVar 变量所在模块/类以外的地方不能访问该变量,这是私有变量
    前后双下划线 如__name__和__init__ Python内置特殊变量,哪儿都可以访问

    示例:

    class MyName:
        _name = "WinerChan111"  # 伪私有变量
        __namedede = "WinerChan222" # 真正私有变量,但是增加get__namededeset__namedede实例方法可访问
      def get_namedede(self): 
        return self.__namedede

      def set_namedede(self,s):
        self.__namedede = s


    print(MyName._name) print(MyName.__namedede) #############输出####################### >>> >>> class MyName: ... _name = "w1" ... __namedede = "w2" ... >>> print(MyName._name) w1 >>> print(MyName.__namedede) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: type object 'MyName' has no attribute '__namedede' >>>
    
    
    class MyName:
        _name = "WinerChan111"  # 伪私有变量
        __namedede = "WinerChan222" # 真正私有变量,但是增加get__namededeset__namedede实例方法可访问
      def get_namedede(self): 
        return self.__namedede

      def set_namedede(self,s):
        self.__namedede = s

    print(MyName._name) print(MyName.__namedede)

    #
    ##########输出########### >>> >>> >>> print(MyName._name) w1 >>> r = MyName() >>> print(r.get_namedede()) w2 >>> name = "w3" >>> r.set_namedede(name) >>> r.get_namedede() 'w3' >>> >>>
  • 相关阅读:
    《Python核心编程》数字类型
    我的Android进阶之旅------&gt;Android关于Log的一个简单封装
    Flex中TabNavigator隐藏和显示选项卡
    【HDOJ 5654】 xiaoxin and his watermelon candy(离线+树状数组)
    兔子-svnserver,client搭建
    数据库事务的隔离级别简单总结
    Oracle oledb 打包并集成到程序安装包(VC ADO訪问Oracle)
    kafka分区及副本在broker的分配
    每天进步一点点——mysql——Percona XtraBackup(innobackupex)
    CodeForces 550D Regular Bridge(构造)
  • 原文地址:https://www.cnblogs.com/Paul-watermelon/p/11165178.html
Copyright © 2011-2022 走看看