如何让pythonclass不暴露在外面?

How to make a python class not exposed to the outside?

我对 Python 比较陌生。

当我进行 C/C++ 编程时,我经常使用内部 classes。例如,在some_file.cc中,我们可能会在匿名命名空间中实现一个class,以防止它被外部使用。这作为特定于该文件的助手 class 很有用。

那么,我们如何在 Python 中做类似的事情?

class MyClassOuter:
    def __init__(self,...):
        class MyClassInner:
              def __init__(self,...):
                 pass
        self.my_class = MyClassInner(..)

只会在 MyClassOuter

__init__ 函数中提供 MyClassInner

同样你可以把它放在一个函数里

def my_class_factory(arg1,arg2,...):
    class MyClass:
        def __init__(self,arg1,arg2,...):
           print "OK??"
    return MyClass(arg1,arg2,...)

Python 代码没有任何类似的匿名命名空间或函数的静态链接。您可以通过多种方式获得所需内容

  1. 前缀为_。以下划线开头的名字是可以理解的 供该 python 文件内部使用,不由 from * 进口。就像 class _MyClass.
  2. 一样简单
  3. 使用__all__:如果python文件包含一个字符串列表 命名为 __all__,其中命名的函数和 类 是 理解为该 python 文件的本地文件,不由 from *.
  4. 使用本地classes/functions。这将以与您相同的方式完成 使用 C++ 类.

None 这些正是您想要的,但是以这种方式进行隐私和限制并不是语言的一部分(就像没有私有数据成员等效一样)。 Pydoc 也非常了解这些约定,并将为预期的 public 函数和 类.

提供信息文档