Python"私有"函数编码约定

Kai*_*fei 62 naming coding-style conventions python-2.7

在编写python模块和函数时,我有一些应该暴露给外人的"公共"函数,但是其他一些"私有"函数只能在本地和内部看到和使用.

我理解在python中没有绝对的私有函数.但是,区分"公共"功能和"私人"功能的最佳,最整洁或最常用的风格是什么?

我列出了一些我所知道的风格:

  1. __all__在模块文件中使用以指示其"公共"函数(python __all__模块级变量是什么?)
  2. 在"私有"函数名称的开头使用下划线

人们使用其他任何想法或约定吗?

非常感谢你!

Eri*_*ick 91

从Python的Class模块文档:

Python中不存在除对象内部之外无法访问的私有"实例变量".但是,大多数Python代码都遵循一个约定:前缀为下划线的名称(例如_spam)应被视为API的非公共部分(无论是函数,方法还是数据成员) .它应被视为实施细节,如有更改,恕不另行通知.

由于类私有成员有一个有效的用例(即为了避免名称与子类定义的名称冲突),因此对这种称为名称修改的机制的支持有限.形式__spam的任何标识符(至少两个前导下划线,最多一个尾随下划线)在文本上用_classname__spam替换,其中classname是当前类名,其中前导下划线被剥离.只要它出现在类的定义中,就可以在不考虑标识符的句法位置的情况下完成这种修改.

  • 大多.就像文档说的那样,这是一个惯例,你仍然可以访问它们公开的功能,但"正确"的做事方式是假装它们不是真的存在. (11认同)
  • @radtek我会说它应该适用于你不希望被视为该脚本的公共合同的一部分的任何功能. (3认同)
  • 谢谢!因此,通常人们会使用下划线来区分模块中的“公共”和“私人”功能吗? (2认同)
  • 这个约定是否适用于不基于类的函数? (2认同)