可调用模块

发布于 2021-01-29 15:23:39

为什么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
关注者
0
被浏览
138
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    只有在类型上而不是在实例上定义特殊方法时,才保证可以隐式调用它们。(__call__是模块实例的属性mod_call,而不是的属性<type 'module'>。)不能将方法添加到内置类型中。

    https://docs.python.org/reference/datamodel.html#special-
    lookup



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看