翼度科技»论坛 编程开发 python 查看内容

Python中的私有属性与私有方法

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
关于Python中的私有属性和私有方法

Python对于类的成员没有严格的访问控制限制,这与其他面相对对象语言有区别。关于私有属性和私有方法,有如下要点:
1、通常我们约定,两个下划线开头的属性是私有的(private)。其他为公共的(public);
2、类内部可以访问私有属性(方法);
3、类外部不能直接访问私有属性(方法);
4、类外部可以通过 _类名__私有属性(方法)名访问私有属性(方法)
定义私有属性/方法
  1. class Demo:
  2.     __price = 25.8
  3.     def __init__(self, u_name, u_age):
  4.         self.uname = u_name
  5.         self.__uage = u_age
  6.     def __age(self):
  7.         print("这是私有方法")
  8.         print("调用共有属性:", self.uname)
  9.         print("调用私有属性:", self.__uage)
  10.         print("调用私有类属性:", self.__price)
  11.     def name(self):
  12.         print("这是公有方法")
  13.         print("调用共有属性:", self.uname)
  14.         print("调用私有属性:", self.__uage)
  15.         print("调用私有类属性:", self.__price)
复制代码
使用 dir()函数可以查看对象内的所有的属性和方法

在 python 中任何东西都是对象,一种数据类型,一个模块等,都有子集的属性和方法,除了常用的方法外,其他的你不需要全部记住它,交给 dir() 函数就好了。
  1. d = Demo('Tom', 18)
  2. print(dir(d))
  3. """
  4. ['_Demo__age', '_Demo__price', '_Demo__uage', '__class__', '__delattr__', '__dict__',
  5. '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__',
  6. '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__',
  7. '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',  '__str__',
  8. '__subclasshook__', '__weakref__', 'name', 'uname']
  9. """
复制代码
这些打印出来的属性(方法)是可以直接调用的。从打印的结果可以看到,私有属性 __age()、 __price、__uage 这三个私有属性(方法)都变成了 _Demo__age, _Demo__price, _Demo__uage,也就可以看出,私有属性(方法)在Python中是不允许直接去调用的,类外部可以通过 ”_类名__私有属性(方法)名“ 访问私有属性(方法)
调用属性(方法)
  1. # 调用共有方法
  2. d.name
  3. """
  4. 这是公有方法
  5. 调用共有属性: Tom
  6. 调用私有属性: 18
  7. 调用私有类属性: 25.8
  8. """
  9. #学习中遇到问题没人解答?小编创建了一个Python学习交流群:153708845
  10. # 调用私有方法(错误示范)
  11. d.__age()
  12. """
  13. Traceback (most recent call last):
  14.   File "D:/Local/PycharmProjects/private_obj/demo.py", line 32, in <module>
  15.     d.__age()
  16. AttributeError: 'Demo' object has no attribute '__age'
  17. """
  18. # 调用私有方法(正确示例)
  19. d._Demo__age()
  20. d._Demo__
  21. """
  22. 这是私有方法
  23. 调用共有属性: Tom
  24. 调用私有属性: 18
  25. 调用私有类属性: 25.8
  26. """
  27. # 调用私有属性
  28. print(Demo._Demo__price) # 25.8
  29. print(d._Demo__uage) # 18
复制代码
【注】方法本质上也是属性!只不过是可以通过()执行而已。

来源:https://www.cnblogs.com/python1111/p/18153612
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具