最近我注意到使用模块是保持我的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
通过声明from oop import Team
,我希望只加载类定义。为什么来自oop.py的额外行t1 = Team()
t1.setTeam("Man-Utd", 1)
t1.displayTeam()
正在执行?
模块中是否不允许初始化? 如果我只想要类Team结构而不是其他模块,我该怎么办? 如果我在某处错了,请告诉我。
答案 0 :(得分:8)
在python 模块中是对象。为了创建模块对象,它包含的代码是执行,找到的绑定作为属性添加到对象中。
指定要导入的内容并不会改变整个模块执行的事实,之后仅import
将单个绑定放入作用域。
标准做法是将任何不的代码在执行后导入时执行:
if __name__ == '__main__':
# your code here
__name__
是一个特殊的全局,仅在执行模块时为__main__
。在导入期间,它被设置为模块的名称(因此不会执行该代码)。
要了解有关模块的更多信息,请阅读documentation。还有一节介绍了上面提到的警卫:Executing modules as scripts
答案 1 :(得分:2)
是的,您导入的每个模块的代码都将在最初的import
上运行。 (因为Python是一种解释性语言,这是预期的行为。)
如果您不希望在导入上运行模块的某些部分,则只有在直接运行文件时才执行
if __name__ == "__main__":
t1 = Team()
t1.setTeam("Man-Utd", 1)
t1.displayTeam()
答案 2 :(得分:1)
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()