加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 12:06:44 所属栏目:Python 来源:网络整理
导读:参见英文答案 Why is Python running my module when I import it,and how do I stop it?????????????????????????????????????9个 最近我注意到使用模块是保持我的python编程整洁的好选择. 为了开始,我创建了一个模块(名为oop.py),其中包含一个类,如下所示
参见英文答案 > 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读