如何让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 代码没有任何类似的匿名命名空间或函数的静态链接。您可以通过多种方式获得所需内容
- 前缀为
_
。以下划线开头的名字是可以理解的
供该 python 文件内部使用,不由
from *
进口。就像 class _MyClass
. 一样简单
- 使用
__all__
:如果python文件包含一个字符串列表
命名为 __all__
,其中命名的函数和 类 是
理解为该 python 文件的本地文件,不由
from *
.
- 使用本地classes/functions。这将以与您相同的方式完成
使用 C++ 类.
None 这些正是您想要的,但是以这种方式进行隐私和限制并不是语言的一部分(就像没有私有数据成员等效一样)。 Pydoc 也非常了解这些约定,并将为预期的 public 函数和 类.
提供信息文档
我对 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 代码没有任何类似的匿名命名空间或函数的静态链接。您可以通过多种方式获得所需内容
- 前缀为
_
。以下划线开头的名字是可以理解的 供该 python 文件内部使用,不由from *
进口。就像class _MyClass
. 一样简单
- 使用
__all__
:如果python文件包含一个字符串列表 命名为__all__
,其中命名的函数和 类 是 理解为该 python 文件的本地文件,不由from *
. - 使用本地classes/functions。这将以与您相同的方式完成 使用 C++ 类.
None 这些正是您想要的,但是以这种方式进行隐私和限制并不是语言的一部分(就像没有私有数据成员等效一样)。 Pydoc 也非常了解这些约定,并将为预期的 public 函数和 类.
提供信息文档