'__main__' 在 type() 的输出中是什么意思

And*_*ndy 1 python python-2.7 python-3.x

如果我创建一个如下所示的类,并检查对象的类型,我会得到以下输出。

我的问题是__main__这里是什么意思?

class Student(object):
    pass

>>>a = Student()
>>>type(a)
<class '__main__.Student'>
Run Code Online (Sandbox Code Playgroud)

还有一个问题,如果我检查 Student 类的类型,我会得到以下输出。

>>>type(Student)
<class 'type'>
Run Code Online (Sandbox Code Playgroud)

<class 'type'>这里是什么意思?

Mat*_*lia 5

我的问题是'__main__'这里是什么意思?

__main__Student定义的模块;与您使用 Python 解释器启动的文件对应的模块会自动命名为__main__. 你可能会从通常的习语中记住它

if __name__ == '__main__':
    ...
Run Code Online (Sandbox Code Playgroud)

检查当前模块的名称是否是__main__为了查看这是否是已运行的脚本(而不是作为模块导入)。

如果您Student在另一个文件中定义,并从您的主模块导入它,它会改为显示此类模块的名称。例如:

运行文件

import student

class Student(object):
    pass

a = student.Student()
print(type(a))

b = Student()
print(type(b))
Run Code Online (Sandbox Code Playgroud)

学生.py

class Student(object):
    pass
Run Code Online (Sandbox Code Playgroud)

如果你跑python run.py你会得到

<class 'student.Student'>
<class '__main__.Student'>
Run Code Online (Sandbox Code Playgroud)

您将在其中看到点之前的名称确实是定义给定类型的模块的确认(在这种情况下,用于消除歧义并一目了然地定义某些给定类型)。


<class 'type'>这里是什么意思?

这意味着Student 该类与所有用 定义的一样class,又内置类型的实例type。它可能有点循环,但类本身就是元类的实例;对于有关其在引擎盖下如何工作的所有血腥细节,您可以查看这个问题,但这不是轻松阅读。