如果A.py和B.py在同一目录中,这可以正常工作
# module.py
class A(object):
pass
class B(A):
pass
# module2.py
import module
class C(module.B):
pass
工作正常:
Python 2.7.8 |Continuum Analytics, Inc.| (default, Jul 2 2014, 15:13:35) [MSC v.1500 32 bit (Intel)] on win32
>>> import pyclbr
>>> m = pyclbr.readmodule( "module2")
>>> m.items()[0][1].super
[<pyclbr.Class instance at 0x01EE61E8>]
但是如果我将module.py放在foo目录中,而不是:
# module2.py
import foo.module
class C(foo.module.B):
pass
pyclbr无法解析foo.module.B:
Python 2.7.8 |Continuum Analytics, Inc.| (default, Jul 2 2014, 15:13:35) [MSC v.1500 32 bit (Intel)] on win32
>>> import pyclbr
>>> m = pyclbr.readmodule( "module2")
>>> m.items()[0][1].super
['foo.module.B']
答案 0 :(得分:0)
这就是为什么你必须在放置python模块的目录中创建一个空的__init__.py
文件。即:
.
├── main.py
├── foo
| ├── __init__.py
| └── module2.py
所以你这样导入:
# main.py
import foo.module2
pyclbr.readmodule("foo.module2.B")
或将第二个参数传递给pyclbr.readmodule(module, path=None):
paths_lookup = ["foo", "other/path"]
pyclbr.readmodule("module2", paths_lookup)
当将一个路径列表传递给pyclbr.readmodule时,Python会将这些路径与sys.path合并。
无论如何,只需记住为每个模块目录创建一个__init__.py
。