实例讲解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中的ceil()方法使用教程
May 14 Python
python学习教程之Numpy和Pandas的使用
Sep 11 Python
python实现自主查询实时天气
Jun 22 Python
numpy返回array中元素的index方法
Jun 27 Python
对Python中list的倒序索引和切片实例讲解
Nov 15 Python
python 检查是否为中文字符串的方法
Dec 28 Python
Python实现的爬取豆瓣电影信息功能案例
Sep 15 Python
Python手绘可视化工具cutecharts使用实例
Dec 05 Python
简单了解python列表和元组的区别
May 14 Python
keras的三种模型实现与区别说明
Jul 03 Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
Jan 25 Python
Python OpenCV超详细讲解读取图像视频和网络摄像头
Apr 02 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
php桌面中心(四) 数据显示
2007/03/11 PHP
PHP Smarty生成EXCEL文档的代码
2008/08/23 PHP
PHP用strstr()函数阻止垃圾评论(通过判断a标记)
2013/09/28 PHP
详解PHP实现定时任务的五种方法
2016/07/25 PHP
简单解决微信文章图片防盗链问题
2016/12/17 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
PHP中PCRE正则解析代码详解
2019/04/26 PHP
google地图的路线实现代码
2009/08/20 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
2012/11/07 Javascript
JS 实现点击a标签的时候让其背景更换
2013/10/15 Javascript
对table和ul实现js分页示例分享
2014/02/24 Javascript
canvas实现粒子时钟效果
2017/02/06 Javascript
利用javascript如何随机生成一定位数的密码
2017/09/22 Javascript
Angularjs 手写日历的实现代码(不用插件)
2017/10/18 Javascript
vue this.reload 方法 配置
2018/09/12 Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
2019/03/12 Javascript
vue-form表单验证是否为空值的实例详解
2019/10/29 Javascript
[15:09]DOTA2国际邀请赛采访专栏:Loda
2013/08/06 DOTA
Python之py2exe打包工具详解
2017/06/14 Python
python爬虫获取小区经纬度以及结构化地址
2018/12/30 Python
python3 mmh3安装及使用方法
2019/10/09 Python
JAVA SWT事件四种写法实例解析
2020/06/05 Python
python根据字典的键来删除元素的方法
2020/08/16 Python
CSS3 实现的火焰动画
2020/12/07 HTML / CSS
EJB的基本架构
2016/09/22 面试题
厨师岗位职责
2013/11/12 职场文书
小学生考试获奖感言
2014/01/30 职场文书
数控专业个人求职信范文
2014/02/05 职场文书
学校对教师的评语
2014/04/28 职场文书
大专学生求职自荐信
2014/07/06 职场文书
环保公益策划方案
2014/08/15 职场文书
禁毒宣传活动总结
2014/08/26 职场文书
企业与个人合作经营协议书
2014/11/01 职场文书
2014年路政工作总结
2014/12/10 职场文书
助学金感谢信
2015/01/20 职场文书
Java处理延时任务的常用几种解决方案
2022/06/01 Java/Android