Python论坛  - 讨论区

标题:[python-chinese] Python的交叉引用 ImportError

2006年09月28日 星期四 09:03

gashero harry.python在gmail.com
星期四 九月 28 09:03:59 HKT 2006

有两个模块,或者叫脚本,其中一个定义了类A,另外一个定义了类B。而运行时又需要互相引用对方的类。这时就会弹出ImportError。
比如如下是两个模块的代码:
# File: crossimport.py
from crossimport2 import B

def hello():
	print "Hello"
	crossimport2.hello2()
	return

class A:
	def __init__(self):
		return
	
	def show(self):
		print "A.show()"
		return


# File: crossimport2.py

from crossimport import A

def hello2():
	print "Hello2"
	return

#crossimport.hello()

class B:
	def __init__(self):
		return
	
	def show(self):
		print "B.show()"
		return

这时运行crossimport.py会弹出错误提示无法导入类B。请问这个如何解决。
我也想到了,可能是由于在导入crossimport2模块时,又执行了import
crossimport。所以尚未查找到B时就返回或者死循环了。但是关键是如何解决。这种互相 引用的问题还比较多。

-- 
从前有一只很冷的毛毛虫,他想获得一点温暖。而获得温暖的机会只有从树上掉下来,落进别人的领口。
片刻的温暖,之后便失去生命。而很多同类却连这片刻的温暖都没有得到就..
我会得到温暖么?小心翼翼的尝试,却还是会受到伤害。
我愿为那一刻的温暖去拼,可是谁愿意接受?

欢迎访问偶的博客:
http://blog.csdn.net/gashero

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年09月28日 星期四 10:49

shhgs shhgs.efhilt在gmail.com
星期四 九月 28 10:49:06 HKT 2006

把两个类合在一个文件里面写

On 9/27/06, gashero <harry.python在gmail.com> wrote:
> 有两个模块,或者叫脚本,其中一个定义了类A,另外一个定义了类B。而运行时又需要互相引用对方的类。这时就会弹出ImportError。
> 比如如下是两个模块的代码:
> # File: crossimport.py
> from crossimport2 import B
>
> def hello():
>         print "Hello"
>         crossimport2.hello2()
>         return
>
> class A:
>         def __init__(self):
>                 return
>
>         def show(self):
>                 print "A.show()"
>                 return
>
>
> # File: crossimport2.py
>
> from crossimport import A
>
> def hello2():
>         print "Hello2"
>         return
>
> #crossimport.hello()
>
> class B:
>         def __init__(self):
>                 return
>
>         def show(self):
>                 print "B.show()"
>                 return
>
> 这时运行crossimport.py会弹出错误提示无法导入类B。请问这个如何解决。
> 我也想到了,可能是由于在导入crossimport2模块时,又执行了import
> crossimport。所以尚未查找到B时就返回或者死循环了。但是关键是如何解决。这种互相 引用的问题还比较多。
>
> --
> 从前有一只很冷的毛毛虫,他想获得一点温暖。而获得温暖的机会只有从树上掉下来,落进别人的领口。
> 片刻的温暖,之后便失去生命。而很多同类却连这片刻的温暖都没有得到就..
> 我会得到温暖么?小心翼翼的尝试,却还是会受到伤害。
> 我愿为那一刻的温暖去拼,可是谁愿意接受?
>
> 欢迎访问偶的博客:
> http://blog.csdn.net/gashero
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年09月28日 星期四 10:54

Gary Jia jiakeke在gmail.com
星期四 九月 28 10:54:32 HKT 2006

你可以在用的地方 import, 别在文件头import。

On 9/28/06, gashero <harry.python在gmail.com> wrote:
> 有两个模块,或者叫脚本,其中一个定义了类A,另外一个定义了类B。而运行时又需要互相引用对方的类。这时就会弹出ImportError。
> 比如如下是两个模块的代码:
> # File: crossimport.py
> from crossimport2 import B
>
> def hello():
>         print "Hello"
>         crossimport2.hello2()
>         return
>
> class A:
>         def __init__(self):
>                 return
>
>         def show(self):
>                 print "A.show()"
>                 return
>
>
> # File: crossimport2.py
>
> from crossimport import A
>
> def hello2():
>         print "Hello2"
>         return
>
> #crossimport.hello()
>
> class B:
>         def __init__(self):
>                 return
>
>         def show(self):
>                 print "B.show()"
>                 return
>
> 这时运行crossimport.py会弹出错误提示无法导入类B。请问这个如何解决。
> 我也想到了,可能是由于在导入crossimport2模块时,又执行了import
> crossimport。所以尚未查找到B时就返回或者死循环了。但是关键是如何解决。这种互相 引用的问题还比较多。
>
> --
> 从前有一只很冷的毛毛虫,他想获得一点温暖。而获得温暖的机会只有从树上掉下来,落进别人的领口。
> 片刻的温暖,之后便失去生命。而很多同类却连这片刻的温暖都没有得到就..
> 我会得到温暖么?小心翼翼的尝试,却还是会受到伤害。
> 我愿为那一刻的温暖去拼,可是谁愿意接受?
>
> 欢迎访问偶的博客:
> http://blog.csdn.net/gashero
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese


-- 
Gary Jia 
Software Engineer
Exoweb Ltd.

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年09月28日 星期四 10:57

gashero harry.python在gmail.com
星期四 九月 28 10:57:18 HKT 2006

很无奈的方法,希望得到一些更好的解法。另外,感觉错误的根源在于在文件顶部引用其他模块。所以能否在某一段代码内部使用import方法导入模块,然后用过之后在清除导入的结果呢?

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年09月28日 星期四 11:05

gashero harry.python在gmail.com
星期四 九月 28 11:05:57 HKT 2006

Java是没有这个问题的,Python怎么在这个小事情上栽了C语言中#include的跟头了。

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年09月28日 星期四 11:30

chris chris在v2tech.com
星期四 九月 28 11:30:05 HKT 2006

python faq里专门提到了这个问题
http://www.python.org/doc/faq/programming.html#what-are-the-best-practices-for-using-import-in-a-module

其实如果出现这种需求关键是设计上耦合太紧密,关键还是从design上避免

----- Original Message ----- 
From: "gashero" <harry.python at gmail.com>
To: <python-chinese at lists.python.cn>
Sent: Thursday, September 28, 2006 10:57 AM
Subject: Re: [python-chinese]Python的交叉引用 ImportError


> 很无奈的方法,希望得到一些更好的解法。另外,感觉错误的根源在于在文件顶部引用其他模块。所以能否在某一段代码内部使用import方法导入模块,然后用过之后在清除导入的结果呢?
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年09月28日 星期四 12:30

lu lubiao.py在gmail.com
星期四 九月 28 12:30:58 HKT 2006

 C 的 include 有什么 问题啊.
么机
写成 一个 文件就完了

On 9/28/06, gashero <harry.python at gmail.com> wrote:
> Java是没有这个问题的,Python怎么在这个小事情上栽了C语言中#include的跟头了。
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年09月28日 星期四 12:36

3751 lwm3751在gmail.com
星期四 九月 28 12:36:03 HKT 2006

象这样import当然不行,只能说明你设计有问题。

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年09月28日 星期四 23:28

Linker Lin linkerlin88在gmail.com
星期四 九月 28 23:28:30 HKT 2006

在Python里面文件是一个容器(名空间),两个名空间出现交叉引用说明设计上应该合并.

On 9/28/06, 3751 <lwm3751在gmail.com> wrote:
>
> 象这样import当然不行,只能说明你设计有问题。
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese




-- 
Linker M Lin
linkerlin88在gmail.com
linker.m.lin在gmail.com
  ※※※※※※※※※
  ※※我思故我在※※
  ※※※※※※※※※
-------------- 下一部分 --------------
一个HTML附件被移除...
URL: http://python.cn/pipermail/python-chinese/attachments/20060928/4d62ae7f/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年09月28日 星期四 23:35

刘鑫 march.liu在gmail.com
星期四 九月 28 23:35:00 HKT 2006

%«ÚÛM:ÿßöò¬…ê腪ëʜ­†‰à™¨¥r‰‰jöÊØhœ(§r[zœ­†‰Ü†)Þ±ãè²ÛÚr¶'r§zÇ¥ŠËl§+a¢w'Jæìr¸›zǧv˛±Êâmëh§+a¢w!Šw¬z·ª¹ë-–+-²œ­†‰ÜIì¹»®&Þ±éݺ{.nÇ+‰·­¢œ­†‰Ü†)Þ±êު笶X¬¶Êr¶'rpÞµ¨¥"wè†Ûiÿúr¶'ræj)fjåŠËbú?§+a¢w!Šw¬zm§ÿۖˆ±ÙçzßÜq«Lj·!.+‡LÂÔD¸m¶Ÿÿ§+a¢w'þ˜©z¹šŠ_éÊØhÈbëý«miÈfz{lÿm4ëOvóöûׇÛڶ֜†g§¶f

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号