Python中的互相import问题

最近在写python程序的时候遇到了一个循环引用的问题. 通过看错误提示, 得知是重复引用造成的问题. 先来复现一下:

main.py
1
2
3
from aaaaa.aaaaa import AAAAA

print AAAAA()
aaaaa/aaaaa.py
1
2
3
4
from bbbbb.bbbbb import BBBBB

def AAAAA():
    return 'AAAAA'
bbbbb/bbbbb.py
1
2
3
4
from aaaaa.aaaaa import AAAAA

def BBBBB():
    return 'BBBBB'

执行出来差不多是这样的问题

bbbbb/bbbbb.py
1
2
3
4
5
6
7
8
9
10
python main.py

Traceback (most recent call last):
  File "main.py", line 1, in <module>
    from aaaaa.aaaaa import AAAAA
  File "test/aaaaa/aaaaa.py", line 1, in <module>
    from bbbbb.bbbbb import BBBBB
  File "test/bbbbb/bbbbb.py", line 1, in <module>
    from aaaaa.aaaaa import AAAAA
ImportError: cannot import name AAAAA

相关的问题在这里有讨论. 一个解决办法是把对应依赖的东西放到模块C里面

In Perl

其实这个问题一开始我是没有定位出来的, 也一直没有头绪, 可能还是跟应用输出和自己的思维有关. 既然python有这个问题, 那perl会有吗? 来个同样的示例程序:

main.pl
1
2
3
4
use strict;
use aaaaa::aaaaa;

print aaaaa::AAAAA()
aaaaa/aaaaa.pm
1
2
3
4
5
6
7
8
9
10
package aaaaa;

use bbbbb::bbbbb;

sub AAAAA
{
    'AAAAA'
}

1
bbbbb/bbbbb.pm
1
2
3
4
5
6
7
8
9
10
package bbbbb;

use aaaaa::aaaaa;

sub BBBBB
{
    'BBBBB'
}

1

尝试运行下是没问题的.

话说好像还是python的语法比较简洁?

Comments