命名空间中的名称是唯一的,但这与您的情况无关.基本上有两个不同的东西:“名字”和__name__s. “name”是命名空间中的变量. __name__只是一个类的属性,其值为“类自称的内容”.
在上面的代码中,MyClass是__name__,A和B是名称. MyClass不是__main__名称空间中的名称.您看到的“class __main __.MyClass”只是类的__name__属性,而不是命名空间中的实际变量.通常,类的__name__将等于您使用它定义的名称,但是如果您通过调用类型以编程方式创建类,它仍将具有__name__但不一定可以通过命名空间中的任何名称访问.
这是一个区别的简单示例:
>>> A = type('MyClass', (object,), {})
>>> MyClass
Traceback (most recent call last):
File "", line 1, in
MyClass
NameError: name 'MyClass' is not defined
只是将MyClass传递给type并不会实际创建一个名为MyClass的变量.这些实际变量名称是唯一的,而不是类的内部名称.
如果类是同一个类对象,则该类与另一个类相同.即使它们具有相同的__name__属性,它们仍然可以是不同的对象.