参考

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的私有变量的更多相关文章

  1. Python的私有变量与装饰器@property的用法

    Python的私有变量是在变量前面加上双横杠(例如:__test)来标识, Python私有变量只能在类内部使用,不被外部调用,且当变量被标记为私有后,调用时需再变量的前端插入类名,在类名前添加一个下 ...

  2. [深入Python]Python的私有变量

    Python没有真正的私有变量.内部实现上,是将私有变量进程了转化,规则是:_<类名><私有变量> 下面的小技巧可以获取私有变量: class Test(object): de ...

  3. python的私有变量解析

    在内的内部定义并使用,外部无法訪问,以双下划线作为前作,定义后被python转为 _classname__变量名了 ------------------------------------------ ...

  4. python基础-私有变量和方法

    如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问 __priva ...

  5. Python访问私有变量

    代码: class Counter(object): __secount=0 publicfs=0 def getcount(self): self.__secount+=1 self.publicf ...

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

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

  7. Python 私有变量的访问和赋值

    首先我们这里先描述下: Python中,变量名类似__x__的,以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的(比如 __doc__, __init__等),不是priva ...

  8. python下划线,私有变量

      转自:http://blog.sina.com.cn/s/blog_58649eb30100g4zo.html Python用下划线作为变量前缀和后缀指定特殊变量. "单下划线" ...

  9. Python 私有变量中两个下划线 _ _item 与 一个下划线的区别 _item

    python中没有常量的说法, 但是可以通过元组实现一个常量 在python的私有变量中, 存在两个下划线 _ _item 与一个下划线 _item 的区别 前面带两个下划线的私有变量: 只能在本类中 ...

随机推荐

  1. 【小程序+thinkphp5】 用户登陆,返回第三方session3rd

    服务器环境: centos7   php7.0 准备工作: 注册小程序,并获取 appid .appsecret 下载微信解密算法sdk : https://mp.weixin.qq.com/debu ...

  2. 【贪心】PAT 1033. To Fill or Not to Fill (25)

    1033. To Fill or Not to Fill (25) 时间限制 10 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 ZHANG, Gu ...

  3. jQuery队列(二)

    继续阅读队列提供的方法. jQuery.extend({    queue: function( elem, type, data ) {}, // 将data按照某种类型存储到elem对应的队列中, ...

  4. 3944: Sum[杜教筛]

    3944: Sum Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3471  Solved: 946[Submit][Status][Discuss] ...

  5. FPM打包工具使用

    author:headsen chen date: 2019-01-19  14:57:09 个人原创博客,转自请注明出处和作者,否则追究法律责任 1,安装依赖和语言包 yum -y install ...

  6. 【CF815D】Karen and Cards 单调栈+扫描线

    [CF815D]Karen and Cards 题意:一张卡片有三个属性a,b,c,其上限分别为A,B,C,现在有n张卡片,定义一张卡片能打败另一张卡片当且仅当它的至少两项属性要严格大于另一张的对应属 ...

  7. eclipse使用maven打包时去掉测试类

    eclipse使用maven打包时去掉测试类 在pom.xml文件中增加如下配置: <plugin> <groupId>org.apache.maven.plugins< ...

  8. Solve minGW g++ has stopped working 程序停止运行

    之前在机子装了个很早版本的MinGW,苦于不支持c++11,所以打算卸载掉安装个新版本的.可是网上找了很多版本装好后,编译成功,运行的时候总是弹出 *.exe has stopped working的 ...

  9. 使用pidstat监控资源使用

    linux可以使用pidstat命令监控系统资源,比如监控cup使用如下: pidstat -u 还可以使用 -r(内存) -d(硬盘)

  10. 【巷子】---vue基于mint-ui三级联动---【vue】

    一.基本配置 https://github.com/modood/Administrative-divisions-of-China 三级联动数据地址 二.vue基本配置 1.cnpm install ...