【发布时间】:2012-08-14 03:48:42
【问题描述】:
我的问题是关于我有一个包含类的文件,并且在这个类中有一堆代码将被执行
所以每当我导入该文件时,它都会执行!不创建类的对象! , 这里是例子
文件X
class d:
def __init__(self):
print 'print this will NOT be printed'
print "this will be printed"
文件B
import x
输出是this will be printed,所以我的问题是如何在创建新对象之前跳过执行它?
【问题讨论】:
-
"如何在创建新对象之前跳过执行" -- 为什么不像其他的一样把它放在
__init__中呢? -
为什么不把第二个
print放在__init__方法中呢?我认为__init__可能是您要查找的内容,因为根据定义,代码在对象创建时运行 -
好吧,因为真实的类比示例大很多,大约 350 行,所以很难重新修改它
-
同意@mgilson 和@EmmettJButler。当 Python 导入一个模块时,它会执行模块级代码,包括使用类方法构建类定义等。因此,当您导入 X 时,会构建
class d的定义(因此您可以从 @987654331 调用它@),它执行类内部的代码。通常这意味着您将设置类级变量和准备附加到实例的未绑定方法,但在您的情况下,这意味着将打印该语句。比我更精通 Python 的人可以纠正我/更好地说明这一点:) -
发布了答案,然后阅读 cmets。 @RocketDonkey 是正确的。使该评论成为答案的唯一缺少的是“......所以将您的代码重构为方法”。 RD,如果您将其发布为答案,我会为您 +1。
标签: python class object python-2.7 call