[英]When importing a file that has classes, do class attributes get initialized?
我是python的初学者,请多多包涵。 我在某处读到,当你导入一个文件时,就好像你执行了那个文件一样。 这让我感到困惑,因为我开始怀疑 class 属性在导入时是否也被初始化。
让我举一个例子,
假设我们有这个名为 cat.py 的文件:
#cat.py
class RawFeature:
bat = 5
我们这里还有另一个文件:
import cat as c
#Does 'bat' get initialized upon calling?
print(c.RawFeature.bat)
“bat”是否在调用时或导入“cat.py”文件时被初始化?
如果它在导入时被初始化,这真的会改变脚本的流程,因为假设 class 变量“bat”是通过调用一些 function 来初始化的......
RawFeature.bat
将在您导入模块cat
或模块中的任何内容(如RawFeature
。 作为快速试金石,如果将以下内容存储在名为thing.py
的文件中,
def initialize():
print('Calling initialize')
return 5
class Thing:
class_attr = initialize()
然后尝试在 Python REPL shell 中导入thing
或Thing
,您会注意到在进行任何进一步调用之前会打印Calling initialize
。
@rajith-thennakoon-
添加到 kingkupps 响应,如果您希望您的类/方法/anyCodeSnippet 在导入时限制被初始化,您可以在 if 块中添加类/方法/anyCodeSnippet,如下所述。
if __name__ == "__main__":
def initialize():
print('Calling initialize')
return 5
class Thing:
class_attr = initialize()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.