【发布时间】:2012-03-17 14:57:38
【问题描述】:
以下 Python 代码正常执行而不会引发异常:
class Foo:
pass
class Foo:
pass
def bar():
pass
def bar():
pass
print(Foo.__module__ + Foo.__name__)
但很明显,__main__.Foo 和 __main__.bar 有多个实例。为什么 Python 在遇到此命名空间冲突时不会引发错误?而且由于它不会引发错误,它到底在做什么?第一课__main__.Foo被第二课__main__.Foo代替了吗?
【问题讨论】:
-
给一个变量赋值两次有错吗?
-
但这不只是分配一个变量吗?它使用每个新的类定义创建新类型。
-
那又怎样?它正在创建第二个类对象,然后分配名称/“变量”
Foo来引用该类对象,而不是之前引用的对象。模块是一系列语句(大部分类似于函数),class/def只是语句。
标签: python namespaces python-3.x