实例讲解Python中的私有属性


Posted in Python onAugust 21, 2014

在Python中可以通过在属性变量名前加上双下划线定义属性为私有属性,如例子:

#! encoding=UTF-8

 

class A:

    def __init__(self):

         

        # 定义私有属性

        self.__name = "wangwu"

         

        # 普通属性定义

        self.age = 19

         

a = A()

 

# 正常输出

print a.age

 

# 提示找不到属性

print a.__name

执行输出:
Traceback (most recent call last):

  File "C:\Users\lee\Documents\Aptana Studio 3 Workspace\testa\a.py", line 19, in <module>

    print a.__name

AttributeError: A instance has no attribute '__name'

访问私有属性__name时居然提示找不到属性成员而不是提示权限之类的,于是当你这么写却不报错:
#! encoding=UTF-8

 

class A:

    def __init__(self):

         

        # 定义私有属性

        self.__name = "wangwu"

         

        # 普通属性定义

        self.age = 19

         

 

a = A()

 

a.__name = "lisi"

print a.__name

执行结果:
1
lisi
在Python中就算继承也不能相互访问私有变量,如:
#! encoding=UTF-8

 

class A:

    def __init__(self):

         

        # 定义私有属性

        self.__name = "wangwu"

         

        # 普通属性定义

        self.age = 19

         

 

class B(A):

    def sayName(self):

        print self.__name

         

 

b = B()

b.sayName()

执行结果:
Traceback (most recent call last):

  File "C:\Users\lee\Documents\Aptana Studio 3 Workspace\testa\a.py", line 19, in <module>

    b.sayName()

  File "C:\Users\lee\Documents\Aptana Studio 3 Workspace\testa\a.py", line 15, in sayName

    print self.__name

AttributeError: B instance has no attribute '_B__name'

或者父类访问子类的私有属性也不可以,如:
#! encoding=UTF-8

 

class A:

    def say(self):

        print self.name

        print self.__age

         

 

class B(A):

    def __init__(self):

        self.name = "wangwu"

        self.__age = 20

 

b = B()

b.say()

执行结果:
wangwu

Traceback (most recent call last):

  File "C:\Users\lee\Documents\Aptana Studio 3 Workspace\testa\a.py", line 15, in <module>

    b.say()

  File "C:\Users\lee\Documents\Aptana Studio 3 Workspace\testa\a.py", line 6, in say

    print self.__age

AttributeError: B instance has no attribute '_A__age'
Python 相关文章推荐
学习Python selenium自动化网页抓取器
Jan 20 Python
儿童编程python入门
May 08 Python
python批量修改文件编码格式的方法
May 31 Python
python 读取竖线分隔符的文本方法
Dec 20 Python
详解Python中is和==的区别
Mar 21 Python
使用WingPro 7 设置Python路径的方法
Jul 24 Python
tensorflow 获取checkpoint中的变量列表实例
Feb 11 Python
Django media static外部访问Django中的图片设置教程
Apr 07 Python
Python批量将图片灰度化的实现代码
Apr 11 Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
May 10 Python
python接口自动化框架实战
Dec 23 Python
python实现简易名片管理系统
Apr 11 Python
Python创建日历实例
Aug 21 #Python
Python实现批量把SVG格式转成png、pdf格式的代码分享
Aug 21 #Python
python生成日历实例解析
Aug 21 #Python
MySQLdb ImportError: libmysqlclient.so.18解决方法
Aug 21 #Python
Python中除法使用的注意事项
Aug 21 #Python
Python中dictionary items()系列函数的用法实例
Aug 21 #Python
Python 不同对象比较大小示例探讨
Aug 21 #Python
You might like
我的论坛源代码(六)
2006/10/09 PHP
目录,文件操作详谈―PHP
2006/11/25 PHP
PHP 匿名函数与注意事项详细介绍
2016/11/26 PHP
php判断/计算闰年的方法小结【三种方法】
2019/07/06 PHP
jQuery Mobile页面跳转后未加载外部JS原因分析及解决
2013/03/18 Javascript
javascript使用isNaN()函数判断变量是否为数字
2013/09/21 Javascript
抛弃Nginx使用nodejs做反向代理服务器
2014/07/17 NodeJs
jQuery中:visible选择器用法实例
2014/12/30 Javascript
JavaScript中的toDateString()方法使用详解
2015/06/12 Javascript
jQuery实现文本框输入同步的方法
2015/06/20 Javascript
jQuery 遍历函数详解
2015/07/05 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
2015/09/22 Javascript
利用js的闭包原理做对象封装及调用方法
2017/04/07 Javascript
JavaScript实现打地鼠小游戏
2020/04/23 Javascript
Js实现京东无延迟菜单效果实例(demo)
2017/06/02 Javascript
vue生成随机验证码的示例代码
2017/09/29 Javascript
关于jQuery里prev()的简单操作代码
2017/10/27 jQuery
layui实现数据表格点击搜索功能
2020/03/26 Javascript
教你如何用Node实现API的转发(某音乐)
2019/09/20 Javascript
vue之组件内监控$store中定义变量的变化详解
2019/11/08 Javascript
用JS实现选项卡
2020/03/23 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
Python版的文曲星猜数字游戏代码
2013/09/02 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
2017/09/25 Python
django ListView的使用 ListView中获取url中的参数值方式
2020/03/27 Python
细说NumPy数组的四种乘法的使用
2020/12/18 Python
好的演讲稿开场白
2013/12/30 职场文书
一夜的工作教学反思
2014/02/08 职场文书
升学宴主持词
2014/04/02 职场文书
创文明城市标语
2014/06/16 职场文书
生活小常识广播稿
2014/09/16 职场文书
2014年行政执法工作总结
2014/12/11 职场文书
小学工作总结2015
2015/05/04 职场文书
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android
集英社今正式宣布 成立游戏公司“集英社Games”
2022/03/31 其他游戏
SQL Server数据库查询出现阻塞之性能调优
2022/04/10 SQL Server