无意发现的一个 python 的坑

2016-05-12 20:49:57 +08:00
 SlipStupig

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 不能包相互引呢?
7193 次点击
所在节点    Python
35 条回复
romanticbao
2016-05-13 09:22:47 +08:00
我认为这种循环引用,是一种灾难
plqws
2016-05-13 10:35:58 +08:00
然而 commonJS 可以
janxin
2016-05-13 12:11:32 +08:00
@plqws 趁机黑一波 js XD
wayslog
2016-05-13 12:44:05 +08:00
Python: 又是一个用户的坑
zhuf
2016-05-13 13:51:00 +08:00
这叫 坑 ?
secondwtq
2016-05-13 14:02:22 +08:00
@plqws CommonJS 比这还要坑吧

不过就循环引用的表现来看,我觉得 CommonJS 和 Python 模块系统处理的方式差不多。
twhphoenix
2016-05-13 14:05:52 +08:00
python : 这届用户不行
LINEX
2016-05-13 15:49:58 +08:00
@twhphoenix 心疼题主 :)
hwsdien
2016-05-13 17:33:10 +08:00
这届 Python 用户不行
WKPlus
2016-05-13 20:59:00 +08:00
@weyou 你确定你这种方式可以?

python 循环 import 不会导致死循环,但是可能会导致看起来 import 了空 module
sizeoftank
2016-05-14 04:33:25 +08:00
python a.py
=> 跑去执行 from b import myfunc 的时候
解释器中 模块 a 里的 Base 还没被创建
Hackathon
2016-05-14 13:46:06 +08:00
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
SlipStupig
2016-05-15 12:14:57 +08:00
@Hackathon 需要继承啊
codeface
2016-05-15 12:47:37 +08:00
醉了,这也怪 python 。。。
SlipStupig
2016-05-15 13:28:37 +08:00
@codeface 都说了是习惯问题导致的,现在浅阅读的人越来越多了!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/278279

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX