AttributeError: module A has no attribute B
AttributeError: module A has no attribute B
还有一个 python 导入问题。
我有一个目录结构
thing
|- __init__.py
|- run.py
|- mod
|- __init__.py
|- what
|- __init__.py
|- yo.py
yo.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
s 出来了。 python 不应该能够找到 class 吗?这个结构对我很重要,因为我在某个模块下有很多 classes,并且需要能够访问它们,最好是不必对每个模块进行更细粒度的导入,这需要大量代码.
感谢 Maurice 和其他线程的人员。
我找到了
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
的 __init__.py
.
中,它也会起作用
我不同意这是接近禅宗的任何东西,但它确实有效。
还有一个 python 导入问题。
我有一个目录结构
thing
|- __init__.py
|- run.py
|- mod
|- __init__.py
|- what
|- __init__.py
|- yo.py
yo.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
s 出来了。 python 不应该能够找到 class 吗?这个结构对我很重要,因为我在某个模块下有很多 classes,并且需要能够访问它们,最好是不必对每个模块进行更细粒度的导入,这需要大量代码.
感谢 Maurice 和其他线程的人员。
我找到了
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
的 __init__.py
.
我不同意这是接近禅宗的任何东西,但它确实有效。