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
python中的私有变量的更多相关文章
- Python类中的 私有变量和私有方法
默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量.在python中定义私有变量只需要在变量 ...
- OC中的私有变量和description
.OC中的私有变量 在类的实现即.m @implementation中也可以声明成员变量,但是因为在其他文件中通常都只 是包含头文件而不会包含实现文件,所以在.m文件中声明的成员变量是@private ...
- ES6 class类中定义私有变量
ES6 class类中定义私有变量 class类的不足 看起来, es6 中 class 的出现拉近了 JS 和传统 OOP 语言的距离.但是,它仅仅是一个语法糖罢了,不能实现传统 OOP 语言一样的 ...
- python 类的私有变量和私有方法
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/11/08 8:46 # @Author : lijunjiang # @Fil ...
- Python基础_私有变量访问限制
Python内置了一些特殊变量,以前后上下划线标注,同时我们自己要想定义一些变量,不想让外部访问,又该怎么做呢?更多内容请参考:Python学习指南 访问限制 在class内部,可以有属性和方法,而外 ...
- Python迭代器生成器,私有变量及列表字典集合推导式(二)
1 python自省机制 这个是python一大特性,自省就是面向对象的语言所写的程序在运行时,能知道对象的类型,换句话说就是在运行时能获取对象的类型,比如通过 type(),dir(),getatt ...
- Python中的私有属性私有方法、类属性类方法以及单例设计模式
私有属性是对象不希望公开的属性,私有方法是对象不希望公开的方法.在定义私有属性和私有方法时,在属性或者方法前,加上__(两个下划线) 公有方法可以通过对象名直接调用,私有方法不能通过对象名直接调用,只 ...
- Python中什么是变量Python中定义字符串
在Python中,变量的概念基本上和初中代数的方程变量是一致的. 例如,对于方程式 y=x*x ,x就是变量.当x=2时,计算结果是,当x=5时,计算结果是25. 只是在计算机程序中,变量不仅可以是数 ...
- Python中的高级变量类型
高级变量类型 目标 列表 元组 字典 字符串 公共方法 变量高级 知识点回顾 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (int) 浮点型(float) 布尔型(bool) ...
随机推荐
- JS事件(二)事件对象
html事件处理程序中,变量event中保存着事件对象 <button onclick="alert(ev.type)" id="btn">clic ...
- C++ MFC------ 快捷键
创建快捷键 该文讲解如何给dialog的菜单或者按钮添加快捷键. 1.局部快捷键 点击控件,右键点“属性”,在属性Caption后添加&Key,例如: &Y,即通过按Alt+Y即可触发 ...
- ARM三级流水线
title: ARM三级流水线 tags: ARM date: 2018-10-14 16:57:10 --- 参考: ARM指令集E004armproc.chm ARM Architecture R ...
- JAVA-try-catch-finally-自定义异常例子(适合初学者)
package com.net.xinfang.reflect; import java.io.IOException; import java.util.Scanner; /*** * 运行try块 ...
- JMX监控Hadoop的部分常用参数位置
近期版本get无法使用,可能使用了其他参数代替,但源码中已经去掉JMX部分,也没有给出替代接口,应该是不再额外实现了. NameNode DataNode HDFS Yarn HBase MapRed ...
- mysql 常用的命令集合
1.创建表 CREATE TABLE `cardPcitrue`( `id` INT AUTO_INCREMENT NOT NULL PRIMARY KEY COMMENT'编号', `cId` IN ...
- ThinkPHP中RBAC权限带菜单栏显示和详细权限操作
RBAC是什么,能解决什么难题? RBAC是Role-Based Access Control的首字母,译成中文即基于角色的权限访问控制,说白了也就是用户通过角色与权限进行关联[其架构灵感来源于操作系 ...
- java项目中文件含义
1. java项目 .project:是工程构建配置文件 .classpath:保存的是项目所用的外部引用包的路径 .settings:记录项目配置变化的记录文件夹 src:sourcefolder项 ...
- apt-get使用命令
apt-get的卸载命令:remove/purge/autoremove/clean/autoclean apt-get purge / apt-get –purge remove 删除已安装包(不保 ...
- 068、Calico的网络结构是什么?(2019-04-11 周四)
参考https://www.cnblogs.com/CloudMan6/p/7520164.html root@host1:~# docker run -itd --name bbox1 -- ...