实例讲解Python中的私有属性

作者:junjie 时间:2023-11-10 16:41:46 

在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,私有属性
0
投稿

猜你喜欢

  • javascript实现简单的可随机变色网页计算器示例

    2024-04-16 09:37:07
  • 玩转CSS3色彩[译]

    2010-01-13 13:02:00
  • 基于javascript的Form表单验证

    2024-04-10 16:20:03
  • 如何制作一个从Access数据库中读取记录的下拉菜单?

    2010-06-29 21:23:00
  • django框架自定义模板标签(template tag)操作示例

    2023-11-06 16:05:59
  • 浅谈python迭代器

    2023-07-21 21:56:47
  • Python中的特殊语法:filter、map、reduce、lambda介绍

    2021-04-26 12:39:57
  • 浅谈JavaScript函数参数的可修改性问题

    2024-05-02 17:20:29
  • 使用Python打造一款间谍程序的流程分析

    2021-11-21 08:12:32
  • python图片格式转换脚本

    2023-06-20 04:18:06
  • 小记一次mysql主从配置解决方案

    2024-01-12 18:28:42
  • 使用Python中OpenCV和深度学习进行全面嵌套边缘检测

    2021-04-21 10:21:34
  • asp利用XMLHTTP无刷新自动更新数据

    2007-08-23 13:16:00
  • Python3读取和写入excel表格数据的示例代码

    2022-01-21 10:33:55
  • PHP完全二叉树定义与实现方法示例

    2023-07-04 10:49:10
  • Oracle 11g安装错误提示未找到wfmlrsvcapp.ear的解决方法

    2023-07-14 14:31:52
  • Python之读取TXT文件的方法小结

    2022-10-25 16:11:34
  • pytorch中model.named_parameters()与model.parameters()解读

    2023-02-03 23:47:36
  • 基于python使用OpenCV进行物体轮廓排序

    2022-06-27 23:25:01
  • python if not in 多条件判断代码

    2023-06-29 17:40:57
  • asp之家 网络编程 m.aspxhome.com