我试图找出导入在Python中是如何工作的. 假设我有一个包含以下类的foo.py模块:

class Foo: 
    def __init__(self, *args, **kwargs): 
        ... 


foo = Foo() 

现在,我想把它导入其他模块.

它是在每次我导入它时使用相同的实例还是在每次导入它时创建不同的实例,这是否是实例化一个类的好方法,或者最好是导入Foo类并在导入它的模块中创建一个实例(很明显,这个类不需要任何args和kwargs).

推荐答案

Import it in the usual way:
from foo import Foo

如果这是第一次,则将执行www.example.com代码,并且{classdef}语句将为解释器生成字节码. 我们在sys.modules中做一个记录.

后续导入将受益于缓存命中,因此我们将不再重复所有的判断工作. 当www.example.com和www.example.com要求导入foo模块时, 它们将立即获得高速缓存的结果, 它包含了相同的Foo类字节码.

底线是:在该类中,你只得到了代码的一个实例.

Python相关问答推荐

try 与gemini-pro进行多轮聊天时出错

替换字符串中的多个重叠子字符串

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

当使用keras.utils.Image_dataset_from_directory仅加载测试数据集时,结果不同

将jit与numpy linSpace函数一起使用时出错

如何标记Spacy中不包含特定符号的单词?

avxspan与pandas period_range

Pandas Loc Select 到NaN和值列表

处理具有多个独立头的CSV文件

ConversationalRetrivalChain引发键错误

从列表中获取n个元素,其中list [i][0]== value''

为什么调用函数的值和次数不同,递归在代码中是如何工作的?

为什么Python内存中的列表大小与文档不匹配?

如何将泛型类类型与函数返回类型结合使用?

提取最内层嵌套链接

我什么时候应该使用帆布和标签?

普洛特利express 发布的人口普查数据失败

将参数从另一个python脚本中传递给main(argv

根据两个lambda条件筛选组并根据条件创建新列的最佳方式是什么?

为什么fizzbuzz在两个数字的条件出现在一个数字的条件之后时不起作用?