换句话说,要使用foo
我需要导入所有内容,foo
例如:
from A.B.C import foo
或最多
from A.B import C
C.foo()
但我不能这样做:
from A import B
B.C.foo()
这给了我类似的东西'module' object has no attribute "C"
。
换句话说,要使用foo
我需要导入所有内容,foo
例如:
from A.B.C import foo
或最多
from A.B import C
C.foo()
但我不能这样做:
from A import B
B.C.foo()
这给了我类似的东西'module' object has no attribute "C"
。
文档解释了原因:http ://docs.python.org/tutorial/modules.html
每个模块都有自己的私有符号表,它被模块中定义的所有函数用作全局符号表。因此,模块的作者可以在模块中使用全局变量,而不必担心与用户的全局变量发生意外冲突。另一方面,如果您知道自己在做什么,则可以使用与引用其函数时相同的符号 modname.itemname 来触摸模块的全局变量。
http://docs.python.org/tutorial/classes.html#python-scopes-and-namespaces:
严格来说,模块中对名称的引用是属性引用:在表达式 modname.funcname 中,modname 是一个模块对象,funcname 是它的一个属性。在这种情况下,模块的属性和模块中定义的全局名称之间恰好有一个直接的映射:它们共享相同的命名空间!
所以简单地说 BC 没有被导入,并且在上一个示例中不知道。但这会起作用:
from A import B.C
B.C.foo()