2 个回答

单前置下划线的名字,《流畅的python》作者称之为“受保护的”名字,有两种主要的用法:
1、作为类名或函数名时,会阻止其他python脚本通过【from module import *】语句导入该名字,即该名字不会被星号匹配;

"""foo.py模块"""
def add(a, b):
    """待导入的函数,是个公有的名字"""
    return a+b

def _add2(a, b):
    """待导入的函数,是个受保护的名字"""
    return a+b

比如,对于上面的模块foo,如果我在另一个python脚本中使用【from foo import *】语句,实际上是访问不到_add2()函数的,但是如果我使用【from foo import add, _add2】语句,则两个函数都能被访问到。

2、作为类的属性名或方法名时,意为不希望下游的程序员直接访问该名字,而导致意外覆盖该属性,但是这只是一种【命名约定】,python解释器不会对这种属性名做特殊处理。

不想对外暴露的意思,就是说虽然你能从这个文件里import这个函数,但写这东西的人不希望你去用它,希望你把它当私有函数。当然也有可能纯粹是因为重名了,不知道换什么名好就直接在前面加个下划线了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题