如何避免在python中从模块加载特定变量
(我已经签出了——它询问的是类而不是模块。因此,那里的答案不包括我感兴趣的如何避免在python中从模块加载特定变量,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,(我已经签出了——它询问的是类而不是模块。因此,那里的答案不包括我感兴趣的import。) 考虑一下,有一个名为X的模块,带有变量y。如果任何其他模块尝试导入模块X,如何避免在Python中加载变量y 例如: # x.py y=10 然后,我们在其他模块中使用此选项: import x print x.y 如何避免从模块x.py访问x.y 正常使用时导入foo只导入模块一次;所有其他导入都会看到它已导入,并且不会再次加载它 引述: 导入期间,将在sys.modules中查找模块名称,如果
import
。)
考虑一下,有一个名为X
的模块,带有变量y
。如果任何其他模块尝试导入模块X
,如何避免在Python中加载变量y
例如:
# x.py
y=10
然后,我们在其他模块中使用此选项:
import x
print x.y
如何避免从模块x.py访问x.y 正常使用时
导入foo
只导入模块一次;所有其他导入都会看到它已导入,并且不会再次加载它
引述:
导入期间,将在sys.modules中查找模块名称,如果
当前,关联的值是满足导入的模块,并且
这个过程完成了。但是,如果该值为“无”,则
恐怖情绪高涨。如果模块名丢失,Python将
继续搜索模块
长期以来,这一直是口译员的一个特点,而且可能更早
说到您的具体问题,没有变量
y
,有x.y
,因为这是您导入的。如果您从模块导入中执行高度未推荐的*
,您可能会得到一个y
,但您不应该这样做。如果您执行导入模块
,则无法隐藏任何全局成员,这是故意的:,与模块成员使用的相同
一种方法是用前导下划线标记“内部”实体,以提示用户它们不打算用于外部。对于您导入的其他模块的引用,这是不必要的,因为指南明确禁止外部使用它们(唯一的例外是,如果引用的模块无法正常访问)
但是,执行此操作时,您不会获得模块引用,而是直接将其导入到当前命名空间中。默认情况下,将导入除以下划线开头的名称以外的所有内容。您可以通过定义模块属性来覆盖它。加载变量
y
时是否有任何副作用?你知道\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。目前还不清楚确切的需求是什么。这个问题的主持人将其标记为“Python类中是否有‘私有’变量?”的副本,显然他们不了解Python。这个问题不是那个问题的重复。主持人显然对Python一无所知,他们不知道“类”和“模块”之间的区别。如果你问我的话,这种情况是相当令人难过的。顺便说一句,下面是伊万·波兹代夫提供的正确答案。