gpt4 book ai didi

python - 如何只导入 __init__.py 的一部分?

转载 作者:太空宇宙 更新时间:2023-11-03 21:22:57 25 4
gpt4 key购买 nike

我有一个包含一些文件的包,但遇到了一些导入问题。假设我有以下文件:

main.py
Lib
├─ __init__.py
├─ file1.py
└─ file2.py

ma​​in.py:

from Lib import ClassA

foo = ClassA('anything')

Lib/init.py:

from .file1 import ClassA
from .file2 import ClassB

file1.py:

import a_lot_of_things

class ClassA:
pass

file2.py:

import a_lot_of_other_things

class ClassB:
pass

此代码有效,但 Python 还将导入文件中的所有其他类,作为 ClassB。问题是 Python 需要花费大量时间来导入我不想使用的 file2.py 的所有库。

我知道发生这种情况是因为 Python 正在运行 init.py 并且它正在导入所有类,即使我只要求一个类。但我认为只有当我写:

from Lib import *

有没有一种方法可以在 init.py 内部检查我是否导入所有或仅一个特定类来运行此文件/导入?

我也尝试以这种方式构建我的目录:

main.py
Lib
├─ __init__.py
├─ ClassA
│ ├─ __init__.py
│ └─ file1.py
└─ ClassB
├─ __init__.py
└─ file2.py

所以我清理了 Lib/init.py 并将输入放入每个 init.py 中。

ClassA/init.py:

from .file1 import ClassA

ClassB/init.py:

from .file2 import ClassB

但现在我需要这样使用它:

ma​​in.py:

from Lib import ClassA

foo = ClassA.ClassA('anything')

我想直接使用它,就像我之前写的那样。有办法做到这一点吗?

最佳答案

如果您导入模块(或从模块内导入某些内容),该模块导入的所有内容也将被导入。

您只能通过将导入放置在本地上下文中来避免这种情况

例如

my_module:

import some_stuff

def do_stuff()
pass

def do_some_specific_things()
import some_specific_stuff_only_relevant_to_this_function
pass

如果您现在调用 from my_module import do_stuff ,则 import some_stuff 将被执行,但 import some_specific_stuff_only_relevant_to_this_function 将不会执行。

顺便说一句,按如下方式构建代码是没有意义的:

main.py
Lib
├─ __init__.py
├─ ClassA
│ ├─ __init__.py
│ └─ file1.py
└─ ClassB
├─ __init__.py
└─ file2.py

类位于模块内(file1file2 是模块)。模块不能位于类中。

关于python - 如何只导入 __init__.py 的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54098111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com