我正在使用 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。
