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

2024-09-30 12:19:30 发布

您现在位置:Python中文网/ 问答频道 /正文

最近我注意到使用模块是保持python编程整洁的一个好选择。 为了开始,我制作了一个模块(名为,哎呀.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)中,我简单地导入了上面的模块。哎呀.py如下所述:

^{pr2}$

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

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

通过声明from oop import Team,我希望只加载类定义。为什么那些额外的行t1 = Team() t1.setTeam("Man-Utd", 1) t1.displayTeam() 来自哎呀.py会被处决吗?在

模块中不允许初始化吗? 如果我只需要类的团队结构而不需要其他模块的东西,我该怎么办? 如果我有什么地方错了,请告诉我。在


Tags: 模块namepyselfdefteamoopclass
3条回答

在python中,模块是对象。为了创建一个模块对象,它所包含的代码将被执行并将找到的绑定作为属性添加到对象中。在

指定要导入的内容并不会改变这样一个事实,即整个模块被执行,之后只有单个绑定被放在import的作用域中。在

标准做法是,在一个保护后导入时,将您要执行的任何代码放在一个保护之后:

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

__name__是一个特殊的全局变量,它仅在执行模块时是__main__。在导入过程中,它被设置为模块的名称(因此代码不会被执行)。在


要了解有关模块的更多信息,请阅读documentation。还有一节解释了上面提到的保护:Executing modules as scripts

是的,您导入的每个模块的代码都将在初始的import上运行。(由于Python是一种解释语言,这是预期的行为。)

如果模块的某些部分不希望在导入时运行,则仅当文件直接运行时才执行此操作

if __name__ == "__main__":
    t1 = Team()
    t1.setTeam("Man-Utd", 1)
    t1.displayTeam()
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

if __name__ =='__main__': # use if __name__ =='__main__':, then lines will not be executed when you import.
    t1 = Team()
    t1.setTeam("Man-Utd", 1)
    t1.displayTeam()

相关问题 更多 >

    热门问题