以下Python代码正常执行而不引发异常:为什么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
所取代?
要分配一个变量两次是错误的? – JBernardo 2012-03-17 14:59:32
但是,它不仅仅是分配一个变量吗?它使用每个新的类定义创建新类型。 – Channel72 2012-03-17 15:00:20
那又如何?它创建了第二个类对象,然后它分配名称/“变量”Foo来引用该类对象,而不是之前引用的对象。模块是一系列语句(大部分类似于函数),'class' /'def'只是语句。 – delnan 2012-03-17 15:02:51