跨模块单例

2024-03-12

我正在尝试实现单例,但在导入模块时遇到了困难。我的设置如下。我正在使用Python 2.7。

MODULE 1

class SingletonClass(object):
    def __new__(self, *args, **kwargs):
        if not self._instance:
            self._instance = super(SingletonClass, self).__new__(
                                self, *args, **kwargs)
        return self._instance

print SingletonClass()  #OUTPUT: 0x00000000030F1630
print SingletonClass()  #OUTPUT: 0x00000000030F1630 (Good, what I want)

MODULE 2

import SingletonClass

class AnotherClass:
    print SingletonClass.SingletonClass() #OUTPUT: 0x0000000003292208

在模块内,单例正在工作,但在另一个模块中,单例没有返回与第一个模块中相同的对象。知道为什么吗?

Edit

现在我将放置我发现的唯一有效的东西。我确信对此有更好的解决方案,但我认为这可以更好地传达根本问题是什么。

MODULE 1

class SingletonParent(object):
    _instance = None

    def __new__(self, *args, **kwargs):
        if not self._instance:
            self._instance = super(SingletonParent, self).__new__(
                                self, *args, **kwargs)
        return self._instance

MODULE 2

import SingletonParent    
class SingletonClass(object):
        def __new__(self, *args, **kwargs):
            if not SingletonParent.SingletonParent._instance:
               SingletonParent.SingletonParent._instance = super(SingletonClass, self).__new__(
                            self, *args, **kwargs)
            return SingletonParent.SingletonParent._instance 

    print SingletonClass()  #OUTPUT: 0x00000000030F1630
    print SingletonClass()  #OUTPUT: 0x00000000030F1630

MODULE 3

import SingletonClass

class AnotherClass:
    print SingletonClass.SingletonClass() #OUTPUT: 0x00000000030F1630

解决方案(编辑3)

教训:不要将 main 函数与 Singleton 放在同一个模块中!


您的问题很可能是该模块以两个不同的名称导入两次。

要测试这一点,请添加以下内容:

print "Being imported..."

In module1.py.

如果此消息打印两次,则该模块被导入两次,这就是您的问题。要修复此问题,请确保您使用相同的名称在各处导入模块[0],并且您不会使用以下方式进行黑客攻击sys.path.

[0]:从技术上讲,这不是必需的,但这是一个简单的修复。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

跨模块单例 的相关文章

  • 通过 boto3 承担 IAM 用户角色时访问被拒绝

    Issue 我有一个 IAM 用户和一个 IAM 角色 我正在尝试将 IAM 用户配置为有权使用 STS 承担 IAM 角色 我不确定为什么收到 访问被拒绝 错误 Details IAM 角色 arn aws iam 123456789 r
  • 从字典的元素创建 Pandas 数据框

    我正在尝试从字典创建一个 pandas 数据框 字典设置为 nvalues y1 1 2 3 4 y2 5 6 7 8 y3 a b c d 我希望数据框仅包含 y1 and y2 到目前为止我可以使用 df pd DataFrame fr
  • 定义Python源代码编码的正确方法

    PEP 263 http www python org dev peps pep 0263 定义如何声明Python源代码编码 通常 Python 文件的前两行应以以下内容开头 usr bin python coding
  • 如何调整 matplotlib 单选按钮的大小和纵横比?

    我已经尝试了几个小时来使简单的单选按钮列表的大小和纵横比正确 但没有成功 首先 导入模块 import matplotlib pyplot as plt from matplotlib widgets import RadioButtons
  • 尝试从网页Python和BeautifulSoup获取编码

    我试图从网页检索字符集 这会一直改变 目前我使用 beautifulSoup 来解析页面 然后从标题中提取字符集 这工作正常 直到我遇到一个网站 到目前为止 我的代码以及与其他页面一起使用的代码是 def get encoding soup
  • Python re无限执行

    我正在尝试执行这段代码 import re pattern r w w s re compiled re compile pattern results re compiled search COPRO HORIZON 2000 HOR p
  • 指示电子邮件的类型

    我有以下自动化程序 它将电子邮件发送给我自己 并添加了特定的链接 import win32com client as win32 import easygui import tkinter as to from tkinter import
  • 使用 Python 3 动态插入到 sqlite

    我想使用 sqlite 写入多个表 但我不想提前手动指定查询 有数十种可能的排列 例如 def insert sqlite tablename data list global dbc dbc execute insert into tab
  • 如何将 sql 数据输出到 QCalendarWidget

    我希望能够在日历小部件上突出显示 SQL 数据库中的一天 就像启动程序时突出显示当前日期一样 在我的示例中 它是红色突出显示 我想要发生的是 当用户按下突出显示的日期时 数据库中日期旁边的文本将显示在日历下方的标签上 这是我使用 QT De
  • 在Python中读取tiff标签

    我正在尝试用 Python 读取 tiff 文件的标签 该文件是 RGB 的uint16每个通道的值 我目前正在使用tifffile import tifffile img tifffile imread file tif 然而 img是一
  • Python“非规范化”unicode 组合字符

    我正在寻找标准化 python 中的一些 unicode 文本 我想知道是否有一种简单的方法可以在 python 中获得组合 unicode 字符的 非规范化 形式 例如如果我有序列u o xaf i e latin small lette
  • 使用标签或 href 传递 Django 数据

    我有一个包含链接的表 当单击该链接进行更多操作时 我想将一些数据传递给我的函数 my html table tbody for query in queries tr td value a href internal my func que
  • 如何从列表类别中对 pandas 数据框进行排序?

    所以我在下面有这个数据集 我想根据我的列表从 名称 列进行排序 以及按 A 升序和按 B 降序排序 import pandas as pd import numpy as np df1 pd DataFrame from items A 1
  • 基于值而不是类型的单次调度

    我在 Django 上构建 SPA 并且有一个庞大的功能 其中包含许多功能if用于检查我的对象字段的状态名称的语句 像这样 if self state new do some logic if self state archive do s
  • 使用 selenium 和 python 来提取 javascript 生成的 HTML?萤火虫?

    这里是Python新手 我遇到的是数据收集问题 我在这个网站上 当我用 Firebug 检查我想要的元素时 它显示了包含我需要的信息的源 然而常规源代码 没有 Firebug 不会给我这个信息 这意味着我也无法通过正常的 selenium
  • 仅允许正小数

    在我的 Django 模型中 我创建了一个如下所示的小数字段 price models DecimalField u Price decimal places 2 max digits 12 显然 价格为负或零是没有意义的 有没有办法将小数
  • 寻找完美的正方形

    我有这个Python代码 def sqrt x ans 0 if x gt 0 while ans ans lt x ans ans 1 if ans ans x print x is not a perfect square return
  • PyQt5:如何使QThread返回数据到主线程

    I am a PyQt 5 4 1 1初学者 我的Python是3 4 3 这是我尝试遵循的many https mayaposch wordpress com 2011 11 01 how to really truly use qthr
  • Jupyter Notebook:带有小部件的交互式绘图

    我正在尝试生成一个依赖于小部件的交互式绘图 我遇到的问题是 当我使用滑块更改参数时 会在前一个绘图之后完成一个新绘图 而我预计只有一个绘图会根据参数发生变化 Example from ipywidgets import interact i
  • 描述符“join”需要“unicode”对象,但收到“str”

    代码改编自here http wiki geany org howtos convert camelcase from foo bar to Foo Bar def lower case underscore to camel case s

随机推荐

  • OSGi 声明性服务的绑定顺序

    假设我使用 OSGi 声明性服务 并且我有一个服务 该服务具有多个带有策略 动态的引用 A 强制一元 B 强制一元 C 强制倍数 D 可选一元 E 可选的多个 当我的服务开始时 所有参考资料都可用 有没有办法控制bind的调用顺序 我想让
  • 即使在 webpack 配置中拆分后,供应商代码仍然位于 bundle.js 文件中

    使用下面的 webpack 配置 我仍然在 bundle js 文件中获取供应商代码 即使在代码分割之后 bundle js 的大小也保持不变 我希望供应商代码不应出现在bundle js 中 遵循某些链接 但没有帮助 https gith
  • 使用 array_map() 访问第一级键,而不调用 `array_keys()`

    有没有办法做这样的事情 test array array first key gt first value second key gt second value var dump array map function a b return
  • 如何在 D3 中重用两个(或更多)链式转换序列

    我必须应用两个非常长的链式转换序列 它们主要在转换顺序上有所不同 并且我正在寻找一种紧凑的编码方式 作为一个玩具示例 考虑序列顺序应该是的情况a b c d e f g h and e f g h a b c d 我已经尝试使用下面的代码
  • AudioQueue内存播放示例

    有人知道使用 AudioQueue 从内存源播放的任何示例吗 我可以从文件中找到播放的所有示例 使用 AudioFileReadPackets 但在我的特定情况下 我自己实时生成数据 因此理想情况下 我想自己将数据排入队列 而不是使用回调将
  • 在开发期间清除 Rails 会话

    如何清除 Rails 会话以便我可以重新开始 我知道我可以用以下方法使每个会话变量无效session my var nil 但是是否有 rake 任务或知道如何将会话数据恢复为其最基本形式的任务 我在用着Spree http demo sp
  • phpMyadmin 数据库导入错误 #1046 - 未选择数据库

    我有一个从另一台计算机上的 phpmyadmin 导出的 sql 文件 我尝试在此计算机上导入该文件 但收到此错误 Error SQL查询 Database phplogin Table structure for table people
  • 如何让div居中对齐?

    我想要一个垂直和水平居中的 div 即位于页面的中心 我尝试了position absolute并将div的右上角左下角设置为0 但问题是 当我放大页面时 它与其他标题和其他 div 重叠 请帮我 如何在放大页面时将 div 定位在页面中心
  • C# 控制台应用程序 - 如何始终从控制台读取输入?

    我目前正在编写一个使用大量多线程的控制台应用程序 我希望能够始终允许用户在控制台中输入内容 但是 线程会定期输出到控制台 但我希望用户始终能够在控制台中输入内容 并由我来处理输入 我将如何实现这一目标 我在网上没有找到任何相关内容 先谢谢了
  • 如何使用 Java 将 JPEG 图像读入 BufferedImage 对象

    这不是一个重复的问题 因为我已经在Google和StackOverflow中寻找解决方案很长时间了 但仍然找不到解决方案 我有这两张图片 这是来自同一网站的两张图像 具有相同的前缀和相同的格式 唯一的区别是尺寸 第一个较大 而第二个较小 我
  • 导航栏链接到子文件夹

    每当我有一个指向子文件夹中页面的链接时 它就会冻结子文件夹中的导航栏 以便浏览器链接保留在子文件夹中并且无法找到 在 Visual Studio Express 中使用母版页 母版页如下所示
  • EAGL:它到底代表什么?

    我忘了 但是 EAGL 代表什么具体的东西吗 或者它只是核心动画 OpenGL 命名约定的一部分 CAEAGLLayer 等 AGL 是苹果 OS X 的 OpenGL 扩展的名称 我相信 EAGL 是 Embedded AGL 或 ES
  • 为什么使用map、forEach和for循环插入数据库时​​数组的顺序不同

    我有一个数组 1 2 3 4 5 当插入数据库时 我除了收到数据库中的 1 2 3 4 5 这样的结果之外 但只有循环 for 才能给我预期的结果 map 和 forEach 总是给我无序数组 如 1 3 4 5 2 或 4 3 2 5 1
  • EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)

    我真的不明白为什么我有这个错误 首先 调试器停在机器代码处 该线程也没有显示任何内容 程序实际上没有代码就停止了 所以和 dispatch worker thread有关系 那是什么 有什么办法我可以调试这个吗 我应该回滚吗 当您运行 CP
  • pip ImportError:无法从“集合”导入名称“映射”

    pip 尝试访问的 python 库似乎存在冲突 如以下错误所示 root fedora user pip Traceback most recent call last File usr local bin pip line 5 in
  • Format-Table 根据输出缓冲区宽度设置列宽

    我有一个使用的 cmdletFormat Table输出可能很长的字符串 例如注册表路径 我想将每列宽度设置为输出缓冲区宽度除以列数 Example function Write Something CmdletBinding param
  • cassandra 列族数量的增加对堆利用率有什么影响?

    我们使用的是 cassandra 1 1 出于某些优化目的 我们决定增加键空间中的列族数量 对堆利用率有影响吗 Cassandra 是否有可能耗尽内存 根据 Cassandra Wiki 每个节点 消耗的堆大小定义为 memtable th
  • 无法读取 Angular 2 嵌套调用中未定义的属性“订阅”

    我想订阅company list component on getCompanies 来自company service 但是我收到以下错误 无法读取未定义的属性 订阅 这是代码 公司 service ts getCompaniesOfUs
  • 修复同时包含 UTF-8 和 Windows-1252 的文件

    我有一个生成 UTF 8 文件的应用程序 但某些内容的编码不正确 一些字符被编码为 iso 8859 1 又名 iso latin 1 或 cp1252 又名 Windows 1252 有没有办法恢复原文 Yes 显然 最好修复创建文件的程
  • 跨模块单例

    我正在尝试实现单例 但在导入模块时遇到了困难 我的设置如下 我正在使用Python 2 7 MODULE 1 class SingletonClass object def new self args kwargs if not self