根据http://www.faqs.org/docs/diveintopython/fileinfo_private.html:
像大多数语言一样,Python具有
私有元素的概念:
私人
函数,这些函数不能被调用
在模块外
然而,如果我定义两个文件:
#a.py
__num=1
and:
#b.py
import a
print a.__num
当我运行b.py时,它输出1而不给出任何异常。是diveintopython错了,还是我误解了什么?是否有方法将模块的函数定义为私有?
见PEP8指南:
方法名称和实例变量
Use the function naming rules: lowercase with words separated by underscores as necessary to improve
readability.
Use one leading underscore only for non-public methods and instance
variables.
To avoid name clashes with subclasses, use two leading underscores to
invoke Python’s name mangling rules.
Python mangles these names with the class name: if class Foo has an
attribute named __a, it cannot be accessed by Foo.__a. (An insistent
user could still gain access by calling Foo._Foo__a.) Generally,
double leading underscores should be used only to avoid name conflicts
with attributes in classes designed to be subclassed.
为传承而设计
Always decide whether a class’s methods and
instance variables (collectively: “attributes”) should be public or
non-public. If in doubt, choose non-public; it’s easier to make it
public later than to make a public attribute non-public.
Public attributes are those that you expect unrelated clients of your
class to use, with your commitment to avoid backwards incompatible
changes. Non-public attributes are those that are not intended to be
used by third parties; you make no guarantees that non-public
attributes won’t change or even be removed.
We don’t use the term “private” here, since no attribute is really
private in Python (without a generally unnecessary amount of work).