源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

实例讲解Python中的私有属性

  • 时间:2021-03-04 02:28 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:实例讲解Python中的私有属性
在Python中可以通过在属性变量名前加上双下划线定义属性为私有属性,如例子:
[u]复制代码[/u] 代码如下:
#! encoding=UTF-8   class A:     def __init__(self):                  # 定义私有属性         self.__name = "wangwu"                  # 普通属性定义         self.age = 19          a = A()   # 正常输出 print a.age   # 提示找不到属性 print a.__name
执行输出:
[u]复制代码[/u] 代码如下:
Traceback (most recent call last):   File "C:UsersleeDocumentsAptana Studio 3 Workspacetestaa.py", line 19, in <module>     print a.__name AttributeError: A instance has no attribute '__name'
访问私有属性__name时居然提示找不到属性成员而不是提示权限之类的,于是当你这么写却不报错:
[u]复制代码[/u] 代码如下:
#! 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中就算继承也不能相互访问私有变量,如:
[u]复制代码[/u] 代码如下:
#! 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()
执行结果:
[u]复制代码[/u] 代码如下:
Traceback (most recent call last):   File "C:UsersleeDocumentsAptana Studio 3 Workspacetestaa.py", line 19, in <module>     b.sayName()   File "C:UsersleeDocumentsAptana Studio 3 Workspacetestaa.py", line 15, in sayName     print self.__name AttributeError: B instance has no attribute '_B__name'
或者父类访问子类的私有属性也不可以,如:
[u]复制代码[/u] 代码如下:
#! 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()
执行结果:
[u]复制代码[/u] 代码如下:
wangwu Traceback (most recent call last):   File "C:UsersleeDocumentsAptana Studio 3 Workspacetestaa.py", line 15, in <module>     b.say()   File "C:UsersleeDocumentsAptana Studio 3 Workspacetestaa.py", line 6, in say     print self.__age AttributeError: B instance has no attribute '_A__age'
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部