可调用模块
为什么Python不允许模块具有__call__
方法?(除了显而易见的是,直接导入并不容易。)特别是,为什么不使用a(b)
语法来查找__call__
属性,如函数,类和对象那样?(对于模块而言,查找是否只是不兼容地不同?)
>>> print(open("mod_call.py").read())
def __call__():
return 42
>>> import mod_call
>>> mod_call()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'module' object is not callable
>>> mod_call.__call__()
42
-
只有在类型上而不是在实例上定义特殊方法时,才保证可以隐式调用它们。(
__call__
是模块实例的属性mod_call
,而不是的属性<type 'module'>
。)不能将方法添加到内置类型中。https://docs.python.org/reference/datamodel.html#special-
lookup