Skip to main content
 首页 » 编程设计

python之是否可以在 Python 中创建 "private"导入

2025年05月04日8zhengyun_ustc

我正在使用 Python 开发一家工厂,并希望将所有导入设为“私有(private)”。

所以像这样:

from my_classes import MyClass1, MyClass2 
 
class MyFactory(object): 
    def __init__(self, class_name): 
        if class_name == "my_class_1": 
            return MyClass1() 
        elif class_name == "my_class_2": 
            return MyClass2() 

在这种情况下,我希望调用者能够使用 MyFactory,而不是看到 MyClass1 和 MyClass2。

我知道在 Python 中没有私有(private)这样的东西。 我尝试的是 from my_classes import MyClass1 as _my_class_1 但随后我收到一条消息 Constant variable imported as non-constant

目前我是这样解决的:

class MyFactory(object): 
    def __init__(self): 
        do my init stuff here 
 
    def create_myclass_1(self): 
        from my_classes import MyClass1 
        return MyClass1() 
 
    def create_myclass_2(self): 
        from my_classes import MyClass2 
        return MyClass2() 

这对我来说看起来不是很 Pythonic,但我可能是错的。

有人能告诉我是否有更好的方法吗?

请您参考如下方法:

字里行间;你想避免污染你的模块的命名空间,以便人们导入它更容易吗?

在这种情况下,使用魔术变量 __all__。

__all__ = ['a', 'b'] 
 
def a(): 
    pass 
 
def b(): 
    pass 
 
def c(): 
    pass 

如果你把上面的例子保存为test.py,然后from test import *,你就可以同时运行a() 和 b(),但 c() 会引发 NameError。