python3引用自己写的另一个模块_Python:为什么一个导入的模块不能引用另一个导入的模块?...

本文探讨了Python中模块的引用和命名空间的工作原理。通过示例解释了为何一个导入的模块不能直接引用另一个导入的模块,以及如何正确访问它们的属性。建议使用`import subone`然后通过`subone.a`来访问属性,而不是直接在导入的模块中使用。此外,通过`dir()`函数展示了导入模块前后命名空间的变化。
摘要由CSDN通过智能技术生成

如果您这样修改subtwo.py,那么它将起作用import subone

print subone.a

在subtwo.py中执行subone.a时,您试图访问subtwo.py中的命名空间子行,并且在命名空间“subone”中,应该有一个属性“a”。

在subtwo.py中导入subone时,subone将被添加到命名空间中,并且subone命名空间具有属性a.so subone.a将起作用。

我还建议您使用dir()来查看如何添加名称空间。

在subtwo.py中,可以执行以下操作:print dir()

import subone

print dir()

print subone.a

同样,尝试在import语句前后添加“print dir()”,您应该会明白这一点。"import x" adds 'x' to the current modules

namespace while "from x import * " will

add all the module level attributes

directly into current module namespace

因此在上面的第一个main.py、subone.py和subtwo.py示例中,main.py中的命名空间将包含“subone”和“subtwo”,而subtwo.py中的命名空间将为空,并且无法访问subone.a.

[编辑:更多解释]

考虑以下文件:

主.pyprint "Before importing subone : ", dir()

import subone

print "After importing subone and before importing subtwo: ", dir()

import subtwo

print "After importing subone and subtwo: ", dir()

苏伯纳.pya = 'abc'

子图.pyprint dir()

import subone

print "module level print: ", subone.a

print dir()

def printX():

print subone.a

以及running main.py的输出:Before importing subone : ['__builtins__', '__doc__', '__file__', '__name__', '__package__']

After importing subone and before importing subtwo: ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'subone']

['__builtins__', '__doc__', '__file__', '__name__', '__package__']

module level print: abc

['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'subone']

After importing subone and subtwo: ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'subone', 'subtwo']Some Observations您会注意到导入module subtwo.py时,会立即执行print语句。

因此,当在main.py中导入subone和subtwo时,main.py的名称空间将增加。

这并不意味着子工作组的名称空间将被增加。所以“a”只在main.py中通过subone.a可用

当我们在subtwo.py中导入子行时,子行的名称空间被subone扩展,模块subone的属性a通过subone.a在subow.py中可用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值