Mar*_*lla 7 python python-module python-import
似乎使用两个不同的PYTHONPATHs 导入的实体不是相同的对象.
我在我的代码中遇到了一个小问题,我想用一个小例子来解释它.
我创建了源代码树:
a/
__init__.py
b/
__init__.py
example.py
Run Code Online (Sandbox Code Playgroud)
在example.py中:
class Example:
pass
Run Code Online (Sandbox Code Playgroud)
从文件夹的父级a,我运行python和这个测试:
>>> import sys
>>> sys.path.append("/home/marco/temp/a")
>>>
>>> import a.b.example as example1
>>> import b.example as example2
>>>
>>> example1.Example is example2.Example
False
Run Code Online (Sandbox Code Playgroud)
所以问题是:结果为什么False?即使通过两个不同的路径导入,该类也是相同的.如果类是自定义异常并且您尝试捕获它,那么这是一个完全混乱except.
用python 3.4.3测试
Dun*_*can 10
在Python中,该class语句是可执行语句,因此每次执行它都会创建一个新类。
当您导入模块时,Python 将检查sys.modules指定路径中的模块是否已存在。如果是,那么您将只返回相同的模块,如果不是,它将尝试加载该模块并执行它包含的代码。
因此,同一模块的两个不同路径将加载代码两次,这会执行该class语句两次,并且您会定义两个独立的类。
a.py当人们拥有一个作为脚本运行的文件,然后在另一个模块中尝试导入时,通常会遇到这种情况a。该脚本被加载,因为__main__它具有与导入的模块不同的类和不同的全局变量。
其寓意是,引用模块的方式始终保持一致。
| 归档时间: |
|
| 查看次数: |
609 次 |
| 最近记录: |