无意发现的一个 python 的坑
a.py
from b import myfunc
class Base:
pass
b.py
from a import Base
class myfunc(Base):
pass
然后就出现了 ImportError: Can't import A Base
这是否能说明 python 不能包相互引呢? 并没怪 python 不好,主要还是自己习惯不好,导致的 ----------------------- 以下是精选回复-----------------------
答:两个.py 在同一个目录下吗?
答:循环引用?
好吧,我只是前端
答:试了下可以哒,看看两个文件是否在同一目录下
答:不可以互相引用,不然就炸了
答:今天在 v 站上看到第二个尝试解决鸡生蛋蛋生鸡问题的帖子了。
答:到使用的时候再导入就行了
答:python.exe: 无意发现的一个用户的坑
答:"from a import Base"是没办法了,但是"from b import myfunc"可以放到用到 myfunc 的函数体里去做
答:虽然这样做是不对的,但我还是忍不住手动滑稽一下
答:(特地登录来手动滑稽一下
答:不是坑, 但这种情况不要用 from ... import ... 直接 import ...即可
a.py
------
import b
使用 b.myfunc
b.py
-----
import a
使用 a.Base
答:我是来吐槽的,你一个类起名 myfunc ,几个意思啊
答:文档里面对这种情况写得很清楚 不能循环引用
答:http://blog.jobbole.com/68256/
答:《改善 Python 程序的 91 个建议》
答:但是我觉得这样循环引用在任何语言里面都是不科学的。
答:我认为这种循环引用,是一种灾难
答:然而 commonJS 可以
答:Python: 又是一个用户的坑
答:这叫 坑 ?
答:python : 这届用户不行
答:这届 Python 用户不行
答:python a.py
=> 跑去执行 from b import myfunc 的时候
解释器中 模块 a 里的 Base 还没被创建
答:a.py
# -*- coding: utf-8 -*-
def minus(a, b):
return a - b
if __name__ == '__main__':
from b import add
print add(1, 2)
b.py
# -*- coding: utf-8 -*-
def add(a, b):
return a + b
if __name__ == '__main__':
from a import minus
print minus(2, 1)
exec
$ python a.py
3
$ python b.py
1
https://xxx-cook-book.gitbooks.io/python-cook-book/content/Import/CircularImports.html
答:醉了,这也怪 python 。。。
0条评论