还有一个巨蟒进口的问题。
我有一个目录结构
thing
|- __init__.py
|- run.py
|- mod
|- __init__.py
|- what
|- __init__.py
|- yo.pyyo.py的内容如下
class Yo:
def __init__(self):
print("initialized What")我的run.py的内容是
from mod.what import yo
y = yo.Yo
print(y)
y()一切都很好。
<class 'mod.what.yo.Yo'>
initialized What但我需要这样进口:
from mod import what
y = what.yo.Yo
print(y)
y()然后我得到了
Traceback (most recent call last):
File "/Users/pavelkomarov/Desktop/thing/run.py", line 4, in <module>
y = what.yo.Yo
AttributeError: module 'mod.what' has no attribute 'yo'为什么?我把__init__.py弄出去了。python不应该找到这个类吗?这个结构对我很重要,因为我在某个模块下面有很多类,需要能够访问所有类,最好不必对每个模块执行更多的粒度导入,这需要大量的代码。
发布于 2021-12-02 00:19:18
感谢莫里斯和另一条线上的人。
我发现
import importlib
import pkgutil
for mod_info in pkgutil.walk_packages(__path__, __name__ + '.'):
mod = importlib.import_module(mod_info.name)
# Emulate `from mod import *`
try:
names = mod.__dict__['__all__']
except KeyError:
names = [k for k in mod.__dict__ if not k.startswith('_')]在mod的__init__.py中,它起了作用。如果你把它放进what's __init__.py里,它也会起作用。
我不同意,这是任何接近禅宗,但它的工作。
https://stackoverflow.com/questions/70192650
复制相似问题