首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从同一个目录导入__init__.py和模块时python2.7和__init__.py的区别

从同一个目录导入__init__.py和模块时python2.7和__init__.py的区别
EN

Stack Overflow用户
提问于 2015-09-08 13:44:38
回答 1查看 685关注 0票数 8

最近我遇到了一个问题,在python3.3中有一个我从烧瓶上发出的信号-保安没有像预期的那样行事。。在查看烧瓶安全的源代码时,我注意到我从烧瓶安全包中的一个模块导入的信号也是在__init__.py中导入的。通过从包的顶层导入信号,我能够解决我的问题(因为信号是在包初始化时导入的)。

如果运行以下代码:

代码语言:javascript
复制
from flask.ext.security import user_registered
from flask.ext.security.signals import user_registered as user_reg_sig
user_registered==user_reg_sig

我将在python2.7中获得True,并为python 3.3+获取False

导致导入行为差异的python 3.3+有什么不同?

编辑:I仍然被python2.7vs 3.3+问题困扰,但它缩小了在调用__init__.py of flask.ext并使用exthook.py中的ExtensionImporter类导入烧瓶安全性时出现的问题。

在python3.4下运行以下命令,在直接导入烧瓶安全性时返回True,避免使用扩展钩子:

代码语言:javascript
复制
from flask_security.signals import user_registered as user_reg_sig
from flask_security import user_registered
user_registered==user_reg_sig

下面是针对flask.ext.security和flask_security示例的信号的repr():

代码语言:javascript
复制
from flask_security.signals import user_registered as user_reg_sig
from flask_security import user_registered

repr(user_registered)
>>> "<blinker.base.NamedSignal object at 0x7fb38e258400; 'user-registered'>"

repr(user_reg_sig)
>>> "<blinker.base.NamedSignal object at 0x7fb38e258400; 'user-registered'>"

from flask.ext.security import user_registered
from flask.ext.security.signals import user_registered as user_reg_sig

repr(user_registered)
>>> "<blinker.base.NamedSignal object at 0x7fb38e258400; 'user-registered'>"

repr(user_reg_sig)
>>> "<blinker.base.NamedSignal object at 0x7fb38dd030b8; 'user-registered'>"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-10 17:17:39

在多种情况下,Python可以在重新导入模块时决定创建对象的新实例。

事实上,这甚至不是Python 3所特有的,它可以发生在不同的场景中。

主要是,您必须假设这两个对象可能是不同的,并围绕这一点进行工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32459482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档