小编典典
好像你已经用list指向类实例的相同名称遮盖了指向类的内置名称。这是一个例子:
>>> example = list('easyhoss') # here `list` refers to the builtin class
>>> list = list('abc') # we create a variable `list` referencing an instance of `list`
>>> example = list('easyhoss') # here `list` refers to the instance
Traceback (most recent call last):
File "", line 1, in
TypeError: 'list' object is not callable
我相信这是显而易见的。Python将对象名称(函数和类也是对象)存储在字典中(命名空间实现为字典),因此你可以在任何范围内重写几乎任何名称。它不会显示为某种错误。如你所知,Python强调“特殊情况不足以打破规则”。你面临的问题背后有两个主要规则。
命名空间。Python支持嵌套名称空间。从理论上讲,你可以无休止地嵌套名称空间。正如我已经提到的,名称空间基本上是名称和对相应对象的引用的字典。你创建的任何模块都有其自己的“全局”名称空间。实际上,它只是特定模块的本地名称空间。
范围界定。引用名称时,Python运行时会在本地名称空间(相对于引用)中查找该名称,如果该名称不存在,它将在更高级别的名称空间中重复该尝试。该过程将继续进行,直到没有更