我遇到了如下代码:
import redis
import redis as originalRedis
OriginalRedis = originalRedis.Redis # note the uppercase O
class Redis(redis.Redis):
def keys(self, pattern='*'):
# custom implementation to be done here
client = OriginalRedis(self.host, port=self.port, db=self.db)
return client.keys(pattern)
def flushKeys(self):
# some custom implementation TBD here too
return True
redis.Redis = Redis
现在我的问题是关于进口的声明。当我们导入这样的东西时,我们是否要对同一个模块进行两个引用? 模块导入不应该是单例对象吗?我试过以下方法
^{pr2}$所以我猜有一个对单个模块的引用,因为id(dt)
和{
我认为操作是混淆了实例和引用!在
是的。但您还应该了解对象/实例与引用不同(显然您现在已经知道这一点了!)。我认为OP认为多个导入将有点
^{pr2}$del
以前对模块的引用(因此使以前的导入过时),并创建一个新的导入,但事实并非如此!请自己查看下面的代码,并确保这一点。在是的。而且没有任何语言禁止您创建对同一个singleton对象的任意数量的引用!在
注意:有些OP只是像我这样的人,甚至是我!在
谢谢大家!在
正确。
as
子句所做的就是将一个新名称绑定到一个对象。如果您直接导入一个模块,然后通过as
导入同一个模块但名称不同,则两个名称将指向完全相同的对象。例如:documentation for ^{} statements also mentions this behavior :
是的,你可以这样想。Python只在需要时执行导入模块的代码,所以从技术上讲是的。模块对象是单例对象。但你必须记住,即使是单身汉也可以有多个名字。在
仅仅因为您为一个对象创建了一个新别名,并不意味着您创建了一个全新的对象。您所做的只是创建一个新名称来引用完全相同的对象。如果这不是真的,那么上面的代码将返回}是不同的对象
False
作为re
和{相关问题 更多 >
编程相关推荐