关于Python中的私有属性和私有方法
关于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中是不允许直接去调用的,类外部可以通过 ”_类名__私有属性(方法)名“ 访问私有属性(方法)
调用属性(方法)#
# 调用共有方法
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
【注】方法本质上也是属性!只不过是可以通过()执行而已。#
作者: DesireYang
出处:https://www.cnblogs.com/desireyang/p/12738649.html
版权:本文采用「署名-非商业性使用-相同方式共享 4.0 国际」知识共享许可协议进行许可。
Explicit is better than implicit(明了胜于晦涩)
希望对您有所帮助!感谢观看!
如要转载,请注明出处:转载自:https://www.cnblogs.com/desireyang/,谢谢
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!