Module(__name__)是做什么用的?

3
我对这行代码感到困惑:

email = Module(__name__)

我猜这只是创建一个别名来引用当前所在的模块?如果不是,那么这个操作是干什么的?

9
这将取决于“Module”的定义是什么... - kindall
那么在Python中,Module没有一般意义吗? - cerhovice
3
不,没有内置的名为Module的模块。从首字母大写来看,它可能是一个类,但这只是一种猜测。 - kindall
1
“Module”是一个名称,你必须在之前定义过,可以通过导入或自己定义来实现。因此,它实际上取决于你代码的其余部分。如果单独使用,“NameError: name 'Module' is not defined”错误将会出现。 - Dettorer
1个回答

1
在一个模块中,该模块的名称(以字符串形式)可作为全局变量__name__的值使用。
>>> import itertools as it
>>> it.__name__
'itertools'

但是email = Module(__name__)会引发NameError:(名称“Module”未定义)。如果您定义了名称Module,例如使用itertools(__name__),则由于它不可调用,它会引发TypeError

因此,由于__name__是模块属性,您不能仅传递它。

另外,您可以在dir()函数的结果中找到__name__,该函数用于查找模块定义的名称。

>>> dir(itertools)
['__doc__', '__name__', '__package__', 'chain', 'combinations', 'combinations_with_replacement', 'compress', 'count', 'cycle', 'dropwhile', 'groupby', 'ifilter', 'ifilterfalse', 'imap', 'islice', 'izip', 'izip_longest', 'permutations', 'product', 'repeat', 'starmap', 'takewhile', 'tee']

但是Module()函数是做什么的?给当前模块赋予Module的__name__属性意味着什么?这行代码是创建别名还是其他操作? - cerhovice
@cerhovice 在Python中,名称Module没有任何意义。如果您的模块不可调用,则Module(__name__)将引发NameError:名称'Module'未定义。 - Mazdak
从理论上讲,OP可能会执行from types import ModuleType as Module或类似的操作。令人惊讶的是,ModuleType()可以手动实例化 - Kevin
@Kevin,是可以的,不过我认为需要把所有事情都解释清楚。你认为我还需要添加什么来使回答更完整? - Mazdak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接