导入带有继承的约定

时间:2015-08-07 03:55:50

标签: python oop python-3.x python-import

我有一个目录结构:

/somedir
    /x
        A.py
        B.py
/anotherdir
    /y
        C.py

B导入A。当我从B.py运行somedir/x/时,此功能正常。但是,当我尝试导入C.py然后运行

时,在B.py
$> python C.py

抱怨找不到A。我可以将somedir/x/添加到python路径中,这样当我运行C.py时,它可以找到BA。但是,我担心在我使用的另一个目录(diffdir/z/A)中是否会有另一个A可能与包含somedir/x/A的pythonpath冲突。

1 个答案:

答案 0 :(得分:0)

我猜你得到的基本问题是因为Python 2.x和Python 3.x之间的intra-package references发生了变化。来自documentation -

  

<强> 6.4.2。包内参考

     

当包被组织成子包时(与示例中的声音包一样),您可以使用绝对导入来引用兄弟包的子模块。例如,如果模块sound.filters.vocoder需要使用sound.effects包中的echo模块,则可以使用sound.effects import echo

基本上,如果要导入BB导入兄弟,则在Python 3.x中,您需要使用绝对路径导入A中的B。根据您的说法,您要导入B作为 -

import somedir.x.B

然后在B中,您需要导入A作为 -

import somedir.x.A

或者您也可以尝试 -

from . import A