• python中的私有变量


    class Test1:
        def f1(self):
            self.name ="张三"
            self.__age = 20 #使用名称变形实现私有变量
            print(self.name)
            print(self.__age)
     
    class Test2(Test1): #继承基类Test1
        def f(self):
            print(self.name)
            print(self.__age)
     
    inst1 = Test1()
    inst1.f1()
     
    Test2.f(inst1)
    '''--------------------- 
    作者:Mr.杨. 
    来源:CSDN 
    原文:https://blog.csdn.net/kc_1197977022/article/details/70664676?utm_source=copy 
    版权声明:本文为博主原创文章,转载请附上博文链接!
    '''
    #输出如下:
    '''
    张三
    20
    张三
    AttributeError: 'Test1' object has no attribute '_Test2__age'
    '''

    在python中,类中定义的__spam(至少两个前导"_",最多一个后缀"_")会被文本式的替换为_classname__spam(classname是当前类名),无论这个变量是实例变量还是类变量。而这个过程可以理解为发生在执行代码之前

    __age会被文本式的转换为_classname__age,而这里的classname是当前类,所以test1中的__age会被文本式的替换为_Test1__age,test2中的__age会被替换为_Test2__age。

    注意:仅仅在类中出现的__spam会被替换,而在类外部出现的__spam则不会被替换:

    就是说类内部使用私有变量,会自动带上类名

    所有的私有变量都不应该在外部使用,虽然我们可以这样使用_类名+私有变量这样在外部使用,但是这违背了我们的初中,所以所有的私有变量都不该在外部使用

    在java中,类中的变量有三种,public,protect,private,那么从这个角度将,python只有两种 public和privata,而前面两个下滑下就是后者,不加就是前者

    ——————————————————分割线++++++++++++++++++++++++++++++

    以上说的是前面有两个下划线,后面有至多一个下划线的成员变量,这种变量就是本文章主要讨论的私有变量,

    还有一种变量,前面只有一个下划线,无后缀下划线,这种变量也是有特殊意义的,这种变量是

    叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量;这个现在暂且不熟悉,等以后用到了再来更新

    更新:

    目前已知的_spam的作用:比如在模块c.py中定义了一个前面有一个下划线的变量,_c,然后在主程序中导入该模块所有 ,from c import *

    ,则主程序不能访问到这个_c变量

    需要注意的是,如果是前置两个下划线的变量,__c,则通过from module_name import *的方式也同样无法访问到这个变量

    第二次更新:

    一个前置下滑线的变量_c虽然不能通过from module_name import * 这样的方式在当前程序中引用,但是可以显式的直接导入: from module_name import _c

  • 相关阅读:
    H5相关网址
    ASP.NET MVC Razor视图引擎攻略
    深度解析 ASP.NET MVC 5
    .Net MVC 框架基础知识
    java SDK服务端推送 --极光推送(JPush)
    Nexus Repository Manager OSS 3.x 安装配置
    java项目中使用ffmpeg剪辑部分视频
    net 异步与同步
    IDEA把spring-boot项目打包成jar
    开放api接口签名验证
  • 原文地址:https://www.cnblogs.com/saolv/p/9819820.html
Copyright © 2020-2023  润新知