📜  如何允许模块中定义的类可以在模块外部访问?(1)

📅  最后修改于: 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__ 需要在模块中维护一个变量,而使用 _ 前缀则需要程序员遵循一定的规范和约定。无论选择哪种方式,都需要考虑到模块的封装性和安全性。