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

python中的私有变量的更多相关文章

  1. Python类中的 私有变量和私有方法

    默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量.在python中定义私有变量只需要在变量 ...

  2. OC中的私有变量和description

    .OC中的私有变量 在类的实现即.m @implementation中也可以声明成员变量,但是因为在其他文件中通常都只 是包含头文件而不会包含实现文件,所以在.m文件中声明的成员变量是@private ...

  3. ES6 class类中定义私有变量

    ES6 class类中定义私有变量 class类的不足 看起来, es6 中 class 的出现拉近了 JS 和传统 OOP 语言的距离.但是,它仅仅是一个语法糖罢了,不能实现传统 OOP 语言一样的 ...

  4. python 类的私有变量和私有方法

    #!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/11/08 8:46 # @Author : lijunjiang # @Fil ...

  5. Python基础_私有变量访问限制

    Python内置了一些特殊变量,以前后上下划线标注,同时我们自己要想定义一些变量,不想让外部访问,又该怎么做呢?更多内容请参考:Python学习指南 访问限制 在class内部,可以有属性和方法,而外 ...

  6. Python迭代器生成器,私有变量及列表字典集合推导式(二)

    1 python自省机制 这个是python一大特性,自省就是面向对象的语言所写的程序在运行时,能知道对象的类型,换句话说就是在运行时能获取对象的类型,比如通过 type(),dir(),getatt ...

  7. Python中的私有属性私有方法、类属性类方法以及单例设计模式

    私有属性是对象不希望公开的属性,私有方法是对象不希望公开的方法.在定义私有属性和私有方法时,在属性或者方法前,加上__(两个下划线) 公有方法可以通过对象名直接调用,私有方法不能通过对象名直接调用,只 ...

  8. Python中什么是变量Python中定义字符串

    在Python中,变量的概念基本上和初中代数的方程变量是一致的. 例如,对于方程式 y=x*x ,x就是变量.当x=2时,计算结果是,当x=5时,计算结果是25. 只是在计算机程序中,变量不仅可以是数 ...

  9. Python中的高级变量类型

    高级变量类型 目标 列表 元组 字典 字符串 公共方法 变量高级 知识点回顾 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (int) 浮点型(float) 布尔型(bool) ...

随机推荐

  1. 第一篇:安装Android Studio问题及其解决方案

    ubuntu18.04配置android studio3.2.1环境 1.JDK安装与配置:https://www.cnblogs.com/yuanbo123/p/5819564.html(按照文档操 ...

  2. Day18--Python--面向对象--类与类之间的关系

    1. 依赖关系 在方法中引入另一个类的对象 (最不紧密的一种关系) 依赖关系都是把另一个对象当做参数 class Elephant: def __init__(self, name): self.na ...

  3. QT: 自定义断言;

    使用Qt  creator + mingw + gdb进行qt项目开发时,应用Q_ASSERT进行断言总是会出现问题:  断言失败,程序崩溃而不是停止: 采用自定义断言能完美解决该问题(方法取自于国外 ...

  4. linux下测试磁盘的读写IO速度-简易方法

    linux下测试磁盘的读写IO速度-简易方法 参考资料:https://blog.csdn.net/zqtsx/article/details/25487185 一:使用hdparm命令 这是一个是用 ...

  5. webpack打包内存溢出的解决方法

    由于项目文件越来越多,最终导致在打包时报javaScript heap out of memory错误 解决方案: 1.增加v8内存 使用increase-memory-limit 1)安装 npm ...

  6. 1042. Shuffling Machine (20)

    Shuffling is a procedure used to randomize a deck of playing cards. Because standard shuffling techn ...

  7. Event Recommendation Engine Challenge分步解析第四步

    一.请知晓 本文是基于: Event Recommendation Engine Challenge分步解析第一步 Event Recommendation Engine Challenge分步解析第 ...

  8. mysql的定时任务

    参考博客:https://blog.csdn.net/qq_26562641/article/details/53301407 查看event是否开启: show variables like '%s ...

  9. java使用google开源工具实现图片压缩【转】

    jar包名 import net.coobird.thumbnailator.Thumbnails; import net.coobird.thumbnailator.geometry.Positio ...

  10. 能使 Oracle 索引失效的六大限制条件【转】

    . 引用自: http://www.cnblogs.com/orientsun/archive/2012/07/05/2577351.html  总结得非常到位 Oracle 索引的目标是避免全表扫描 ...