经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
python私有成员与公有成员
来源:cnblogs  作者:丹华抱一鷇音子  时间:2018/9/25 20:35:58  对本文有异议

python并没有对私有成员提供严格的访问保护机制。

  • 在定义类的成员时,如果成员名以两个下划线“__”或更多下划线开头而不以两个或更多下划线结束则表示是私有成员。
  • 私有成员在类的外部不能直接访问,需要通过调用对象的公开成员方法来访问,也可以通过Python支持的特殊方式来访问。
  1. 1 class A:
  2. 2 def __init__(self, value1 = 0, value2 = 0):
  3. 3 self._value1 = value1
  4. 4 self.__value2 = value2
  5. 5 def setValue(self, value1, value2):
  6. 6 self._value1 = value1
  7. 7 self.__value2 = value2
  8. 8 def show(self):
  9. 9 print(self._value1)
  10. 10 print(self.__value2)
  11. 11
  12. 12 >>> a = A()
  13. 13 >>> a._value1
  14. 14 0
  15. 15 >>> a._A__value2 # 在外部访问对象的私有数据成员
  16. 16 0
在Python中,以下划线开头的变量名和方法名有特殊的含义,尤其是在类的定义中。
  • _xxx:受保护成员,不能用"from module import *"导入
  • __xxx__:系统定义的特殊成员
  • __xxx:私有成员,只有类对象自己能访问,子类对象不能直接访问到这个成员,但在对象外部可以通过“对象名._类名__xxx”这样的特殊方式来访问
Python中不存在严格意义上的私有成员。
  1. 1 class Fruit:
  2. 2 def __init__(self):
  3. 3 self.__color = 'Red'
  4. 4 self.price = 1
  5. 5 >>> apple = Fruit()
  6. 6 >>> apple.price # 显示对象公开数据成员的值
  7. 7 1
  8. 8 >>> print(apple.price, apple._Fruit__color) # 显示对象私有数据成员的值
  9. 9 1 Red
  10. 10 >>> apple.price = 2 # 修改对象公开数据成员的值
  11. 11 >>> apple._Fruit__color = "Blue" # 修改对象私有数据成员的值
  12. 12 >>> print(apple.price, apple._Fruit__color)
  13. 13 2 Blue
  14. 14 >>> print(apple.__color) # 不能直接访问对象的私有数据成员,出错
  15. 15 AttributeError:Fruit instance has no attribute '__color'

在程序中,可以使用一个下划线“_”来表示不关心该变量的值。

  1. 1 for _ in range(5):
  2. 2 print(3, end=' ') # 此处的3可以为任意值,输出结果为重复5次的值。若改为print(_, end=' ');>>>0 1 2 3 4
  3. 3 3 3 3 3 3
  4. 4 >>> a, _ = divmod(60, 18) # 只关心整商,不关心余数。
  5. 5 >>> a # 即等价于a = 60//18
  6. 6 3
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号