首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >模块:AttributeError对象没有特性

模块:AttributeError对象没有特性
EN

Stack Overflow用户
提问于 2009-08-09 07:12:21
回答 14查看 723.8K关注 0票数 230

我有两个python模块:

a.py

import b

def hello():
  print "hello"

print "a.py"
print hello()
print b.hi()

b.py

import a

def hi():
  print "hi"

当我运行a.py时,我得到:

AttributeError: 'module' object has no attribute 'hi'

这个错误是什么意思?我该如何修复它?

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2009-08-08 23:27:29

您有相互的顶级导入,这几乎总是一个坏主意。

如果您确实需要在Python中使用相互导入,方法是在一个函数中导入它们:

# In b.py:
def cause_a_to_do_something():
    import a
    a.do_something()

现在,a.py可以安全地执行import b,而不会造成问题。

(乍一看,cause_a_to_do_something()的效率可能非常低,因为您每次调用它时它都会执行一个import,但实际上,导入工作只在第一次完成。第二次或以后导入模块时,这是一个快速操作。)

票数 228
EN

Stack Overflow用户

发布于 2010-06-26 22:18:21

当我无意中命名了一个与标准Python模块同名的模块时,我也看到了这个错误。例如,我有一个名为commands的模块,它也是一个Python库模块。事实证明,这很难追踪,因为它在我的本地开发环境中工作正常,但在Google App Engine上运行时出现指定的错误。

票数 109
EN

Stack Overflow用户

发布于 2009-08-08 23:19:41

问题在于模块之间的循环依赖。a导入bb导入a。但是需要先加载其中的一个-在本例中,python在b之前初始化模块a,而当您尝试在a中访问它时,b.hi()还不存在。

票数 48
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1250103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档