python如何访问私有变量_python – 从类访问私有模块变量

我正在尝试理解python范围规则.为此,我尝试从同一模块中的类访问“非常私有”变量

bar = "bar"

_bar = "underscore"

__bar = "double underscore"

def foo():

print bar

print _bar

print globals()["__bar"]

print __bar

class Foo:

def __init__(self):

print bar

print _bar

print globals()["__bar"]

print __bar #NameError: global name '_Foo__bar' is not defined

foo()

Foo()

它因NameError而失败.我在规范中找不到任何相关内容.那么,为什么它失败了,这种行为描述的地方呢?

解决方法:

在类定义中,所有以双下划线开头的名称都会被破坏;重写以包含类名作为前缀.

这是一个支持在类中将名称标记为“私有”并保护它不被子类覆盖的功能.见identifiers documentation:

Private name mangling: When an identifier that textually occurs in a class definition begins with two or more underscore characters and does not end in two or more underscores, it is considered a private name of that class. Private names are transformed to a longer form before code is generated for them. The transformation inserts the class name, with leading underscores removed and a single underscore inserted, in front of the name. For example, the identifier __spam occurring in a class named Ham will be transformed to _Ham__spam. This transformation is independent of the syntactical context in which the identifier is used. If the transformed name is extremely long (longer than 255 characters), implementation defined truncation may happen. If the class name consists only of underscores, no transformation is done.

最好不要在模块全局变量上使用双下划线前缀;没有必要这样做,单个下划线足以表明该值是模块内部的.

如果您遇到这样的值,请创建一个未损坏的别名,或使用globals()[name].

标签:python,python-2-7,oop,private

来源: https://codeday.me/bug/20191007/1864524.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574336.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高斯消元学习

1. 证明XOR满足交换律,结合律,是自身的逆运算。比如说,1^0 1 1^1 0 0^1 1 0^0 01^1^0 0 1^0^1 0.a^b^ab 即一个数异或两次相当于无效 2. 从N个数中选出两个数,使XOR和最大。解法:我们知道两个数字之间的异或…

java经纬度格式_java经纬度格式转换

在数学中,表示角度的度、分、秒分别使用、′、″符号进行表示。160′,1′60″ ,13600″。由上述可知度分秒转换度的计算公式为:(ddmm′ss″) ddmm/60ss/3600如:11330′10.25″ 11330/6010.25/3600 ≈113.502847度分秒…

Android GPS及地磁传感器 API

Android 提供的位置包括经纬度和时间戳,可选地包含高度和方位,高度以WGS84椭球体为参照,方位以真北为参考。 地磁传感器以磁北为北。有2种传感器可提供方位信息:地磁场(Geomagnetic)传感器和方向&#xff0…

e3是合法浮点数吗_下面4个选项中,均是合法浮点数的选项是?

选B。b中的123是整数,不是浮点数,2e4.2的指数是4.2不满足浮点数的规则必须是整数,e5中的e不满足浮点数的规则,所以b中3个数均不是浮点数。a中的160、0.12是正确的,c中的123e4、0.0是正确的,d中的234、1e3是…

winform 菜单激发窗体切换做法

经常会用到类似于下图这样的winform窗体,其中点击各个菜单时于鏊做到内容窗体的切换,今天也记录一直切换的方法 在主窗体放置一个panal,所有的内容窗体均在改panal上呈现,实现以下方法 ///实例化主窗体 private void FrmSetup_Loa…

java 正则表达式 反向_正则表达式中的数量表示符、反向引用、零宽断言、以及java中的用法...

在表示数量时,如果一个正则表达式X,后面没有加表示数量的符号,那就默认出现一次。如果指定需要出现n次,那就用{n},例如a{n},就是匹配a出现n次的。a{n,}表示a出现至少n次的,而这个时候就会默认是贪婪模式&am…

cocos2d-x Lua与OC互相调用

1. Lua 调用OC 先看例子: hello.lua: -- 点击回调函数local function notifymenuCallbackTest()local luaoc require(luaoc)local ok, ret luaoc.callStaticMethod("RemoteRequestRouter", "notifyWatch", {params1 "NOTIFICATION_TO_H…

coldwallet java eth_wallet-eth 以太坊代币钱包 助记词 私钥 keystore 转账

wallet-eth-androidwallet-eth 以太坊代币钱包 助记词 私钥 keystore 转账(bip39、bip32、bip44、web3j)生成钱包地址// 生成钱包地址Wallet wallet WalletManager.generateWalletAddress();// 根据助记词获取地址WalletManager.generateAddress(wallet.getMnemonic());// 通过…

Uva 10004(二分图的判定)

这题其实很简单的说,第一次用邻接表来存图 首先图的储存结构是结构体head数组。。。其实head数组保存的 struct node {int v;int next; }V[200*200]; 假设现在有u节点,v表示的是和他邻接的点,next保存的是v对应的编号,head数组保…

django配置在MySQL_怎么在Django中安装与配置mysql

怎么在Django中安装与配置mysql发布时间:2021-02-26 17:42:11来源:亿速云阅读:57作者:Leah本篇文章为大家展示了怎么在Django中安装与配置mysql,内容简明扼要并且容易理解,绝对能使你眼前一亮,通…

php 返回数组元素函数_php array_values 返回数组的所有值详解及实例

php array_valuesphp array_values 函数用于返回数组中所有的值,注意该函数将为新数组建立数组索引,原来的文字索引将不存在。本文章向大家讲解array_values函数的基本语法及使用实例。array_values 返回数组中所有的值基本语法:array array_…

0909 粗浅的认识编译原理

经过相关网页的浏览,也看到了各大网站中各方牛人的回答,我似乎对编译原理有了自己一点粗浅的认识。首先,编译原理及技术从根本上来讲就是对算法问题进行求解,这个问题十分复杂,更不用说其解决算法。 而本学期开的算法分…

PHP点歌插件,斗鱼弹幕点歌插件_小葫芦社区_小葫芦插件交流 - Powered by Discuz!

更新版本:3.3.7更新日期:2017-04-25更新日志:1. 修复 部分斗鱼房间无法连接弹幕的问题(主要是参与主播带你嗨购活动的主播)2. 修复 其他已知问题更新版本:3.2.16更新日期:2017-03-01更新日志:1. 修复 斗鱼弹…

Java字符串找出4个字节长度的字符

不解释,直接上代码: 由于Iteye代码贴四个字节的UTF-8字符出错,特能图的方式发布几个特殊字符: Java代码 public class Byte4Check { public static void main…

java编写sql语句,java实现简单的给sql语句赋值的示例

代码本身很简单。拼接sql的时候?不好数,简单的用来赋值。/*** TODO 循环赋值,缺少的类型可随时添加* author Lucius* param pt* param list* throws SQLException*/public static void setParam(PreparedStatement pt, List list) throws SQLException{f…

div 左右并排,使用CSS如何让两个div并排显示

用CSS如何让两个DIV盒子并排体现呢?各人知道默认情况下DIV是独占一排的,DIV不设置任何CSS格局,这个DIV盒子都邑独有一行踊跃换行。运用CSS让两个DIV并排闪现,排成一排显示思空见贯方式有两种:1、运用display:inline2、…

ASP.NET MVC5 与EF6学习系列

最近学习使用MVC5和EF6,博客园搜索了一番,写下这篇文章记录,以便学习使用。 一、ASP.NET MVC5 网站开发 洞庭夕照写的博客系列 ASP.NET MVC5 网站开发实践 - 概述 ASP.NET MVC5 网站开发实践(一) - 项目框架 ASP.NET MVC5 网站开发实践(一) -…

耦合度和聚合度

简单地说,对象之间的耦合度就是对象之间的依赖性。指导使用和维护对象的主要问题是对象之间的多重依赖性。对象之间的耦合越高,维护成本越高。因此对象的设计应使类和构件之间的耦合最小. 耦合性是程序结构中各个模块之间相互关联的度量.它取…

php 获取 省份缩写,php获取客户端IP,国家,省份,地区,ISP等信息

php获取客户端IP,国家,省份,地区,ISP等信息,首先获取获取客户端的公网ip,开始本地搭建的环境,本地访问获取到的是127.0.0.1,然后用138的接口可以实现curl模拟客户端访问 http://city.ip138.com/ip2city.asp 可看到真实客户端的ip。…

JStorm-介绍

1.概述 JStorm 是一个类似于 Hadoop 的MapReduce的计算系统,它是由Alibaba开源的实时计算模型,它使用Java重写了原生的Storm模型(Clojure和Java混合编写的),并且再原来的基础上做了许多改进。用户只需按照指定的接口实…