[py]python的私有变量
python中并没有真正意义上的私有成员,它提供了在成员前面添加双下划线的方法来模拟类似功能。具体来说:
_xxx 表示模块级别的私有变量或函数
__xxx 表示类的私有变量或函数
这被称为name nangling,将__membername替换为_classname__membername。
这样从语法上实现了私有成员不能用classinstance.__membername访问,但是任然可以用
classinstance._classname__membername访问。
python类的私有属性
class A(object):
def __init__(self):
self.age = 22
a = A()
class B(object):
def __init__(self):
self.__age = 22
b = B()

class私有属性防止子类同名重写
子类继承父类age属性,并重写,后访问父类age,也变了
class A(object):
def __init__(self):
self.age = 42
def foo(self):
print self.age
class B(A):
def __init__(self):
super(A, self).__init__()
self.age = 21
def bar(self):
print self.age
p = B()
p.bar()
p.foo()
//21 21
将父类的__age私有化后,子类继承重写该变量,访问父类方法也不会改变
class A(object):
def __init__(self):
self.__age = 42
def foo(self):
print self.__age
class B(A):
def __init__(self):
super(B, self).__init__()
self.__age = 21
def bar(self):
print self.__age
p = B()
p.bar()
p.foo()
//21 42
[py]python的私有变量的更多相关文章
- Python的私有变量与装饰器@property的用法
Python的私有变量是在变量前面加上双横杠(例如:__test)来标识, Python私有变量只能在类内部使用,不被外部调用,且当变量被标记为私有后,调用时需再变量的前端插入类名,在类名前添加一个下 ...
- [深入Python]Python的私有变量
Python没有真正的私有变量.内部实现上,是将私有变量进程了转化,规则是:_<类名><私有变量> 下面的小技巧可以获取私有变量: class Test(object): de ...
- python的私有变量解析
在内的内部定义并使用,外部无法訪问,以双下划线作为前作,定义后被python转为 _classname__变量名了 ------------------------------------------ ...
- python基础-私有变量和方法
如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问 __priva ...
- Python访问私有变量
代码: class Counter(object): __secount=0 publicfs=0 def getcount(self): self.__secount+=1 self.publicf ...
- python 类的私有变量和私有方法
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/11/08 8:46 # @Author : lijunjiang # @Fil ...
- Python 私有变量的访问和赋值
首先我们这里先描述下: Python中,变量名类似__x__的,以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的(比如 __doc__, __init__等),不是priva ...
- python下划线,私有变量
转自:http://blog.sina.com.cn/s/blog_58649eb30100g4zo.html Python用下划线作为变量前缀和后缀指定特殊变量. "单下划线" ...
- Python 私有变量中两个下划线 _ _item 与 一个下划线的区别 _item
python中没有常量的说法, 但是可以通过元组实现一个常量 在python的私有变量中, 存在两个下划线 _ _item 与一个下划线 _item 的区别 前面带两个下划线的私有变量: 只能在本类中 ...
随机推荐
- 【转载】.NET 开发者必备的工具箱
本文作者Spencer是一名专注于ASP.NET和C#的程序员,他列举了平时工作.在家所使用的大部分开发工具,其中大部分工具都是集中于开发,当然也有一些其它用途的,比如图片处理.文件压缩等. 如果你是 ...
- 推荐系统之基于图的推荐:基于随机游走的PersonalRank算法
转自http://blog.csdn.net/sinat_33741547/article/details/53002524 一 基本概念 基于图的模型是推荐系统中相当重要的一种方法,以下内容的基本思 ...
- <转>Python: __init__.py 用法
转自 http://www.cnblogs.com/BeginMan/p/3183629.html python的每个模块的包中,都有一个__init__.py文件,有了这个文件,我们才能导入这个目录 ...
- 【llinux】yum命令出现Loaded plugins: fastestmirror Determining fastest mirrors
在进行yum 安装的时候.报错了. Loaded plugins: fastestmirror Determining fastest mirrors fastestmirror是yum的一个加速插件 ...
- MacOS 安装PyQt5
PyQt5官方安装教程指出2种安装方法: Installing from Wheels Building and Installing from Source 网上搜罗的大多是按照第二种方法安装的,本 ...
- PKI技术原理
转:http://3layer.blog.51cto.com/57448/20430 对称加密 symmetric cryptographic 非对称加密 asymmetric ...
- eclipse中改变默认的workspace的方法
1.File-->Switch Workspace-->Other 2.Window-->Preferences-->General-->Startup and Shui ...
- php curl-class post
use \Curl\Curl; $curl = new Curl();$curl->setHeader('Content-Type', 'application/json');$curl-> ...
- JavaScript怎样学
嘿,我最近接到一个 Web 项目,不过老实说,我这两年没怎么接触 Web 编程,听说 Web 技术已经发生了一些变化.听说你是这里对新技术最了解的 Web 开发工程师? 准确地说,我是一名「前端工程师 ...
- 如何查看Mac电脑的处理器核心数目-CPU的核心数目
1.通过点击关于本机来查看