无意发现的一个 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 不能包相互引呢?
7179 次点击
所在节点    Python
35 条回复
alphadog619
2016-05-12 20:55:50 +08:00
两个.py 在同一个目录下吗?
SourceMan
2016-05-12 20:56:50 +08:00
循环引用?
好吧,我只是前端
pointer
2016-05-12 20:56:53 +08:00
试了下可以哒,看看两个文件是否在同一目录下
RIcter
2016-05-12 21:00:09 +08:00
不可以互相引用,不然就炸了
est
2016-05-12 21:01:14 +08:00
今天在 v 站上看到第二个尝试解决鸡生蛋蛋生鸡问题的帖子了。
ElegantOfKing
2016-05-12 21:13:53 +08:00
@est 2333333
太直接!
Mark3K
2016-05-12 21:14:09 +08:00
到使用的时候再导入就行了
am241
2016-05-12 21:15:33 +08:00
python.exe: 无意发现的一个用户的坑
SlipStupig
2016-05-12 21:39:02 +08:00
@pointer 光引用不行,还得继承
MrEggNoodle
2016-05-12 21:40:29 +08:00
@est 神总结。
clino
2016-05-12 21:48:27 +08:00
"from a import Base"是没办法了,但是"from b import myfunc"可以放到用到 myfunc 的函数体里去做
fy
2016-05-12 22:18:05 +08:00
虽然这样做是不对的,但我还是忍不住手动滑稽一下
mdzz
2016-05-12 22:31:47 +08:00
(特地登录来手动滑稽一下
weyou
2016-05-12 23:09:02 +08:00
不是坑, 但这种情况不要用 from ... import ... 直接 import ...即可

a.py
------
import b
使用 b.myfunc

b.py
-----
import a
使用 a.Base
Kilerd
2016-05-13 00:42:26 +08:00
我是来吐槽的,你一个类起名 myfunc ,几个意思啊
ericls
2016-05-13 01:01:27 +08:00
文档里面对这种情况写得很清楚 不能循环引用
SlipStupig
2016-05-13 02:22:05 +08:00
@Kilerd 我随便写一个你就相信了,哈哈哈哈,我要是写 myObject 你怎么理解呢
Alexhex
2016-05-13 08:33:45 +08:00
ryanking8215
2016-05-13 08:54:42 +08:00
《改善 Python 程序的 91 个建议》
wizardoz
2016-05-13 09:11:08 +08:00
但是我觉得这样循环引用在任何语言里面都是不科学的。

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

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

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

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

© 2021 V2EX