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) ...
随机推荐
- 第二十六篇-单击事件、Toast(提示框信息)
单击事件有3种方法: 第一种: layout.xml <?xml version="1.0" encoding="utf-8"?> <Line ...
- java参数可变方法
java中允许一个方法中存在多个参数 public class Parmvarexmple { //参数可变的方法 public int sum(int...n) { int tempSum=0; f ...
- Luogu P1117 [NOI2016]优秀的拆分
题目链接 \(Click\) \(Here\) 这题质量不错,就是暴力分有点足\(hhhhhhhh\),整整有\(95\)分. (搞得我写完暴力都不想写正解直接理解思路之后就直接水过去了\(QwQ\) ...
- (二叉树 bfs) leetcode 199. Binary Tree Right Side View
Given a binary tree, imagine yourself standing on the right side of it, return the values of the nod ...
- php小项目踩坑以及其中的注意点(第二篇)
用户登录页面 1.通过数据库验证用户名和密码(可以将里面要用到的数据库信息,放入到一个config文件中) <?php define('DB_HOST','localhost'); define ...
- 2019你该掌握的开源日志管理平台ELK STACK
转载于https://www.vtlab.io/?p=217 在企业级开源日志管理平台ELK VS GRAYLOG一文中,我简单阐述了日志管理平台对技术人员的重要性,并把ELK Stack和Gra ...
- Hibernate的入门:
1 下载Hibernate5 http://sourceforge.net/projects/hibernate/files/hibernate-orm/5.0.7.Final/hibernate-r ...
- 查询sql数据库中表占用的空间大小
最近在给一家客户做系统维护时,需要查看数据库表的大小,相关的sql如下: 先在左上角下拉框中选对要查的数据库再执行以下语句 1. exec sp_spaceused '表名' --( ...
- vs code解决golang开发环境问题 dial tcp 216.239.37.1:443: connectex: A connection attempt failed
安装插件是出现 如下错误提示, https fetch failed: Get https://golang.org/x/tools/cmd/gorename?go-get=1: dial tcp 2 ...
- 解决Lost connection to MySQL server during query错误方法
昨天使用Navicat for MySQL导入MySQL数据库的时候,出现了一个严重的错误,Lost connection to MySQL server during query,字面意思就是在查询 ...