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

Posted Python热爱者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中的私有属性和私有方法相关的知识,希望对你有一定的参考价值。

Python对于类的成员没有严格的访问控制限制,这与其他面相对对象语言有区别。关于私有属性和私有方法,有如下要点:

1、通常我们约定,两个下划线开头的属性是私有的(private)。其他为公共的(public);
2、类内部可以访问私有属性(方法);
3、类外部不能直接访问私有属性(方法);
4、类外部可以通过 ”_类名__私有属性(方法)名“ 访问私有属性(方法)

定义私有属性/方法

class Demo:
__price = 25.8

def __init__(self, u_name, u_age):
self.uname = u_name
self.__uage = u_age

def __age(self):
print("这是私有方法")
print("调用共有属性:", self.uname)
print("调用私有属性:", self.__uage)
print("调用私有类属性:", self.__price)

def name(self):
print("这是公有方法")
print("调用共有属性:", self.uname)
print("调用私有属性:", self.__uage)
print("调用私有类属性:", self.__price)

使用 dir()函数可以查看对象内的所有的属性和方法,

在 python 中任何东西都是对象,一种数据类型,一个模块等,都有子集的属性和方法,除了常用的方法外,其他的你不需要全部记住它,交给 dir() 函数就好了。

d = Demo(Tom, 18)
print(dir(d))
"""
[_Demo__age, _Demo__price, _Demo__uage, __class__, __delattr__, __dict__,
__dir__, __doc__, __eq__, __format__, __ge__, __getattribute__, __gt__,
__hash__, __init__, __init_subclass__, __le__, __lt__, __module__, __ne__,
__new__, __reduce__, __reduce_ex__, __repr__, __setattr__, __sizeof__, __str__,
__subclasshook__, __weakref__, name, uname]
"""

这些打印出来的属性(方法)是可以直接调用的。从打印的结果可以看到,私有属性 ​​__age()​​​、 ​​__price​​​、​​__uage​​​ 这三个私有属性(方法)都变成了​​_Demo__age​​​,​​_Demo__price​​​, ​​_Demo__uage​​​,也就可以看出,私有属性(方法)在Python中是不允许直接去调用的,类外部可以通过 ​​_类名__私有属性(方法)名​​访问私有属性(方法)

调用属性(方法)


学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!


# 调用共有方法
d.name
"""
这是公有方法
调用共有属性: Tom
调用私有属性: 18
调用私有类属性: 25.8
"""

# 调用私有方法(错误示范)
d.__age()
"""
Traceback (most recent call last):
File "D:/Local/PycharmProjects/private_obj/demo.py", line 32, in <module>
d.__age()
AttributeError: Demo object has no attribute __age
"""

# 调用私有方法(正确示例)
d._Demo__age()
d._Demo__
"""
这是私有方法
调用共有属性: Tom
调用私有属性: 18
调用私有类属性: 25.8
"""

# 调用私有属性
print(Demo._Demo__price) # 25.8
print(d._Demo__uage) # 18

【注】方法本质上也是属性!只不过是可以通过()执行而已。


以上是关于Python中的私有属性和私有方法的主要内容,如果未能解决你的问题,请参考以下文章

python-类的封装(私有属性,私有方法)

python-类的封装(私有属性,私有方法)

Python中私有方法和私有属性

Python 中的“公共”或“私有”属性?啥是最好的方法?

Python中的公共和私有方法[重复]

Python私有属性和私有方法