Python "私有"函数编码约定
在写Python模块和里面的函数时,我有一些“公共”函数是给外部使用的,但还有一些“私有”函数只想让内部使用,不想让外面的人看到。
我知道在Python中没有绝对的私有函数。那么,区分“公共”函数和“私有”函数的最佳、最整洁或最常用的方式是什么呢?
我列出了一些我知道的方式:
- 在模块文件中使用
__all__
来标明哪些是“公共”函数(什么是Python中的__all__模块级变量?) - 在“私有”函数的名字前加下划线
还有其他人使用的想法或约定吗?
非常感谢!
1 个回答
142
来自Python的类模块文档:
在Python中,没有真正的“私有”实例变量,也就是说,除了在对象内部,外部无法访问这些变量。不过,大多数Python代码遵循一个约定:如果一个名字前面有个下划线(比如 _spam),那么它应该被视为不公开的部分(无论是函数、方法还是数据成员)。这意味着它是实现细节,可能会随时改变。
因为有合理的需求需要类内部的私有成员(比如避免与子类中定义的名字冲突),所以Python提供了一种有限的支持机制,叫做名字改编。任何形式为 __spam 的标识符(至少两个前导下划线,最多一个后导下划线)会被文本上替换成 _classname__spam,其中 classname 是当前类的名字,前面的下划线会被去掉。这种改编不考虑标识符的语法位置,只要它在类的定义中就会发生。