📅  最后修改于: 2023-12-03 15:38:09.509000             🧑  作者: Mango
在 Python 中,模块是封装代码的基本单位。模块中的对象默认情况下是私有的,只有在模块内部才能被访问。如果我们想要在模块外部访问模块中定义的类,需要进行一些设置,本篇文章将会介绍两种常用的方法。
__all__
在模块中定义一个 __all__
变量,用于指定模块中需要导出的对象。只有在 __all__
中列出的对象才能被模块外部引用。
# module.py
class MyClass:
pass
__all__ = ['MyClass']
在模块外部引用该模块时,只需通过 from module import MyClass
的形式导入即可。
# main.py
from module import MyClass
my_obj = MyClass()
_
前缀在模块中定义带有 _
前缀的类或函数,表示它们是私有的,外部应该避免直接使用这些对象。但是,这并不是真正的封装,这些对象仍然可以被外部访问,只不过这种做法是一种“文化约定”,旨在告诫程序员不要轻易引用这些对象。
# module.py
class _MyClass:
pass
def _my_func():
pass
class MyClass:
pass
在模块外部引用该模块时,只需通过 from module import MyClass
的形式导入即可,而 _MyClass
和 _my_func
都应该被视为内部实现,不应该被直接使用。
# main.py
from module import MyClass
my_obj = MyClass()
以上两种方法都可以使模块中定义的类可以在模块外部访问。在实际编程中,我们应该根据具体情况来选择适合自己的方案。使用 __all__
需要在模块中维护一个变量,而使用 _
前缀则需要程序员遵循一定的规范和约定。无论选择哪种方式,都需要考虑到模块的封装性和安全性。