为什么简单地导入python模块会执行该模块中的所有内容?

参见英文答案 > Why is Python running my module when I import it, and how do I stop it?                                    9个
最近我注意到使用模块是保持我的python编程整洁的好选择.
为了开始,我创建了一个模块(名为oop.py),其中包含一个类,如下所示:

#Module named oop

class Team:

    def __init__(self):
            print "class Team initialized"

    def displayTeam(self):
            print "Team name: ", self.name, ",Rank :" , self.rank

    def setTeam(self,name,rank):
            self.name = name
            self.rank = rank


t1 = Team()
t1.setTeam("Man-Utd", 1)
t1.displayTeam()

根据python文档,如果我们想要使用模块中的特定属性,那么我们使用< from module_name> import< attribute> .我只想加载“班级队”

在另一个python代码(名为oop1.py)中,我只是导入了上面的模块. oop.py如下所述:

#This is oop1.py.          
#Importing module oop

from oop import Team

来自终端的python oop1.py的输出是:

class Team initialized
Team name:  Man-Utd ,Rank : 1

通过从oop导入团队声明,我期望只加载类定义.为什么这些额外的行t1 = Team()
t1.setTeam(“Man-Utd”,1)
t1.displayTeam()
 从oop.py开始执行?

模块中是否允许初始化?
如果我只想要类Team结构而不是其他模块,我该怎么办?
如果我在某处错了,请告诉我.

最佳答案
在python模块中是对象.为了创建模块对象,执行它包含的代码,并将找到的绑定作为属性添加到对象中.

指定要导入的内容不会更改整个模块执行的事实,之后只会通过导入将单个绑定放入作用域.

标准做法是在保护后导入时放置您不想执行的任何代码:

if __name__ == '__main__':
    # your code here

__name__是一个特殊的全局,仅在执行模块时才是__main__.在导入期间,它被设置为模块的名称(因此不会执行该代码).

要了解有关模块的更多信息,请阅读documentation.还有一节介绍了上述防护:Executing modules as scripts

转载注明原文:为什么简单地导入python模块会执行该模块中的所有内容? - 代码日志