繁体   English   中英

导入包含类的文件时,是否初始化 class 属性?

[英]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 中导入thingThing ,您会注意到在进行任何进一步调用之前会打印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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM