deepcopy 不尊重元类

2024-03-26

我有一堂课,根据设计,必须遵循单例图案。所以我继续使用元类。一切都运行良好,直到报告了一个错误,总而言之,deepcopy-ied 我的实例单例类不是相同的实例。

我可以通过从基础继承来解决这个错误单例-type 类,但我宁愿不这样做,原因在这个问题 https://stackoverflow.com/q/6760685/312650.

下面给出了该问题的一个工作示例:

class SingletonMeta(type):
    def __init__(cls, name, bases, dict):
        super(SingletonMeta, cls).__init__(name, bases, dict)
        cls.instance = None 
    def __call__(cls,*args,**kw):
        print "SingletonMeta __call__ was called"
        if cls.instance is None:
            cls.instance = super(SingletonMeta, cls).__call__(*args, **kw)
        return cls.instance

class MyClass1(object):
    __metaclass__ = SingletonMeta

class SingletonBase(object):
    _instance = None
    def __new__(class_, *args, **kwargs):
        print "SingletonBase __new__ was called"
        if not isinstance(class_._instance, class_):
            class_._instance = object.__new__(class_, *args, **kwargs)
        return class_._instance

class MyClass2(SingletonBase):
  pass

from copy import deepcopy as dcp

mm1 = MyClass1()
mm2 = dcp(mm1)
print "mm1 is mm2:", mm1 is mm2

mb1 = MyClass2()
mb2 = dcp(mb1)
print "mb1 is mb2:", mb1 is mb2

Output:

SingletonMeta __call__ was called
mm1 is mm2: False
SingletonBase __new__ was called
SingletonBase __new__ was called
mb1 is mb2: True

您能给我一些建议,告诉我应该如何解决这个问题吗?我正在运行 Python 2.7.X


上的文档copy模块这样说:

为了让类定义自己的复制实现,它可以定义特殊方法__copy__() and __deepcopy__()。 [...] 调用后者来实现深拷贝操作;它传递一个参数,即备忘录字典。 [...]

所以如果你声明这些返回self,这应该可以解决问题。

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

deepcopy 不尊重元类 的相关文章

  • 在 Python 中对数据进行求和

    Given that the fitting function is of type 我打算将这样的函数拟合到我拥有的实验数据 x y f x 中 但后来我有一些疑问 当涉及求和时 如何定义拟合函数 一旦定义了函数 即def func re
  • Pyenv 无法在 Cygwin 上安装 python: ModuleNotFoundError: No module named '_ctypes'

    我正在尝试设置 Cygwin 环境以使用 pyenv 来管理 python 版本 我没有管理员权限 所以我使用以下命令运行设置 no admin flag 我使用 Cygwin 包管理器应用程序解决了一些依赖关系 但我被困在了这一点上 Mo
  • 创建圆形图像 PIL Tkinter

    Currently I have a zoom feature in my application that works very well however I d like the actual zoom box to be a circ
  • 我怎样才能在python cgi中找到上传的文件名

    我制作了如下简单的网络服务器 import BaseHTTPServer os cgi import cgitb cgitb enable html
  • 使用信号时出现 django TransactionManagementError

    我有一个与 django 的用户和 UserInfo 一对一的字段 我想订阅用户模型上的 post save 回调函数 以便我也可以保存 UserInfo receiver post save sender User def saveUse
  • 创建一个打开文件并创建字典的函数

    我有一个正在处理的文件 我想创建一个读取文件并将内容放入字典中的函数 然后该字典需要通过 main 函数传递 这是主程序 它无法改变 我所做的一切都必须与主程序配合 def main sunspot dict file str raw in
  • 有条件填写 pandas 数据框

    我有一个数据框df列中包含浮点值A 我想添加另一列B这样 B 0 A 0 for i gt 0 B i if np isnan A i then A i else Step3 B i if abs B i 1 A i B i 1 lt 0
  • 在函数调用之间保存数据的Pythonic方式是什么?

    对我来说 上下文是我需要在调用修改该值的函数之间保留的单个 int 的信息 我可以使用全局 但我知道这是不鼓励的 现在 我使用了包含 int 的列表形式的默认参数 并利用了可变性 以便在调用之间保留对值的更改 如下所示 def increm
  • Selenium:等到 WebElement 中的文本发生变化

    我在用着selenium使用Python 2 7 从网页上的搜索框检索内容 搜索框动态检索结果并在框本身中显示结果 from selenium import webdriver from selenium webdriver common
  • 当 DetailView 遇到时更新模型字段。 [姜戈]

    我有一个类似的 DetailViewviews py views py class CustomView DetailView context object name content model models AppModel templa
  • 管理文件字段当前 url 不正确

    在 Django 管理中 只要有 FileField 编辑页面上就会有一个 当前 框 其中包含指向当前文件的超链接 但是 此链接会附加到当前页面 url 因此会导致 404 因为不存在这样的页面 例如 http 127 0 0 1 8000
  • 为 Python 2.4 改进“with”语句的直接替换

    您能否建议一种方法来编写可在 Python 2 4 中使用的 with 语句的直接替换代码 这将是一个 hack 但它可以让我更好地将我的项目移植到 Python 2 4 EDIT 删除了不相关的元类草图 只需使用 try finally
  • 如何在 Python 中执行相当于预处理器指令的操作?

    有没有办法在 Python 中执行以下预处理器指令 if DEBUG lt do some code gt else lt do some other code gt endif There s debug 这是编译器预处理的特殊值 if
  • PyQt - 如何检查 QDialog 是否可见?

    我有个问题 我有这个代码 balls Ball for i in range 1 10 因此 当我说 Ball 时 这将在 QDialog 上绘制一个球 然后当这完成后 我正在移动球QDialog无限循环中 我想说类似的话while QDi
  • 如何将 pytest 装置与 django TestCase 一起使用

    我如何在TestCase方法 类似问题的几个答案似乎暗示我的例子应该有效 import pytest from django test import TestCase from myapp models import Category py
  • 从 csv 中读取 pandas 数据帧,以非固定标头开始

    我有许多数据文件是由我的实验室中使用的一些相当黑客的脚本生成的 该脚本非常有趣 因为它在标头之前附加的行数因文件而异 尽管它们具有相同的格式并具有相同的标头 我正在编写一个批处理来将所有这些文件处理为数据帧 如果我不知道位置 如何让 pan
  • 在 Tensorflow 2.0 中的简单 LSTM 层之上添加 Attention

    我有一个由一个 LSTM 和两个 Dense 层组成的简单网络 如下所示 model tf keras Sequential model add layers LSTM 20 input shape train X shape 1 trai
  • 如何让你的精灵在pygame中跳跃

    目前我已经制作了一个平台游戏 可以左右移动我的角色 他从地上开始 关于如何让他跳的任何想法 因为我不明白 目前 如果我按住向上键 我的玩家精灵将连续向上移动 或者如果我按下它 我的玩家精灵将向上移动并保持向上 我想找个办法远离他 让我重新跌
  • 如何使用 Python 将我的 GoPro Hero 4 相机直播连接到 openCV?

    我在尝试从我的新 GoPro Hero 4 相机捕获实时流并使用 openCV 对其进行一些图像处理时遇到麻烦 这是我的试用 创建的窗口上没有显示任何内容 import cv2 import argparse import time imp
  • python中匹配3个或更多相同的字符

    我正在尝试使用正则表达式在字符串中查找三个或更多相同的字符 例如 你好 不匹配 噢 会的 我尝试过做类似的事情 re compile 1 3 a zA Z re compile w 1 5 但似乎都不起作用 w 1 2 是您正在寻找的正则表

随机推荐

  • 尝试嵌入小程序时出现 java.lang.NoClassDefFoundError

    所以我为我认识的一个孩子编写了贪吃蛇游戏的代码 但这个该死的东西不会将自己嵌入到 html 中 我确信该类文件与以下目录位于同一目录中snake html 但它仍然拒绝运行 它总是回复 java lang NoClassDefFoundEr
  • 如何测试使用react-spring的react组件?

    我正在尝试测试我的 SpringComponent 该组件使用反应弹簧 https www react spring io 用于动画 当我运行测试时 出现以下错误 玩笑遇到了意想不到的令牌 如果我评论我的 Spring 代码 错误就会消失并
  • 事件侦听器触发错误的目标/函数在错误的时间执行[重复]

    这个问题在这里已经有答案了 我遇到了一个事件侦听器问题 它在错误的对象上触发 要查看它 请单击 Min 下方数字的一个 td 完整的js代码如下 var minedit document getElementsByClassName min
  • Android Sqlite 问题

    我正在尝试实现一个在以下位置找到的 SQLite 示例安卓10 http www android10 org index php articlesdatastorage 235 creating and using databases in
  • 如何使用一个简单的命令将大量变量附加到一个变量

    我想将所有变量粘贴到一个变量中 A blah AA blah2 AAA blah3 AAB blah4 AAC blah5 lets pretend theres 100 more of these Variable composition
  • Google App Engine 中通道池的最佳方法

    似乎使 GAE Channel API 在财务上可行的唯一方法是实施某种池化机制 当我向他们发送有关过高价格的电子邮件时 一位高级应用程序引擎产品经理甚至告诉我这一点 以重用尚未使用的渠道已到期 我一直在集思广益地讨论实现通道池的方法 地点
  • 如何使用 JMeter 将 application/x-www-form-urlencoded 参数发送到 RestServer?

    我开发了一个休息服务器 并将其在本地主机中运行 我尝试使用 JMeter 执行测试 发送请求帖子和获取 取决于调用的方法 我已经发送到 Rest 服务器并使用 JMeter 在简单的 post 请求 获取请求 通过 post 发送文件以及通
  • 活动目录与 OpenLDAP

    LDAP 协议的这两种实现之间的主要区别是什么 异构环境哪个更好 关于这个主题有什么好的网站吗 以下是我立即知道的一些差异 OpenLDAP 可以称为通用 LDAP 服务器 类似于许多其他供应商的 LDAP 服务器 Fedora DS 38
  • Pandas 替换所有列名称中的一个字符

    我的数据框的列名称 来自 csv 文件 包含 and 我想将它们替换为 我怎样才能对所有列进行此操作 Use str replace http pandas pydata org pandas docs stable generated p
  • 如何将 WPF DataGrid 绑定到可变数量的列?

    我的 WPF 应用程序生成的数据集每次可能具有不同的列数 输出中包含对将用于应用格式设置的每列的描述 输出的简化版本可能类似于 class Data IList
  • Cell Swift 中的 UITextView

    我已经搞乱这些限制几个小时了 但无法弄清楚这一点 我的文本视图需要动态单元格高度 正如你所看到的 它与我的时间戳重叠 截至目前 我对时间戳的限制为零 无 我已经尝试了所有可能的组合来完成这项工作 但我无法做到 我也在使用 override
  • MySQL触发器与事务插入或更新

    我正在使用 mysql db 和 java 所以在我的应用程序中我需要使用触发器 但我需要在插入或更新时保存它 当在表A中插入新记录时 触发器将完成在另一个表B中插入一些信息的工作 同样 当对表A中的记录进行更新时 触发器将更新表B中的记录
  • PHP:数组的索引、元素、键、值之间有区别吗?...它们是同一件事吗?

    当处理PHP arrays 我经常在这里使用这样的术语 Array Key Array Index Array Element Array Value 有人可以吗 PLEASE in simple术语解释了其中每一个的含义基本上 means
  • Visual C++ 中的嵌套注释?

    是否可以在 Visual C 中启用嵌套注释 如果有的话 我似乎找不到开关 C 标准中不允许嵌套注释 Visual C 支持该标准 抱歉 没有嵌套评论
  • 服务可以在 onBind 期间获取对 Activity 的引用吗?

    我有一项服务基本上管理媒体播放器播放实例podcasts 一旦活动绑定到服务 它就可以执行播放 暂停 停止等操作 我使用服务是因为我希望播客即使在活动被销毁后也能继续播放 我希望该服务能够在发生错误或正常状态更新时将消息发送回活动 该服务是
  • 如何在 Django-Registration 中使用不同的表单

    Django Registration 在 forms py 文件中有几个表单类 一是 类 RegistrationFormTermsOfService RegistrationForm 我需要对 Django 注册代码的其余部分进行哪些更
  • 会话在控制器方法中变为空

    我有以下控制器 在该控制器中我创建了会话来保存IENUMERABLE数据集 HttpPost ValidateInput false public ActionResult Create Brochure IEnumerable
  • Swift:一个数组中的不同对象?

    一个数组中是否可以有两个不同的自定义对象 我想在一个中显示两个不同的对象UITableView我认为最简单的方法是将所有对象放在一个数组中 根据您想要对数组进行多少控制 您可以创建两种对象类型都实现的协议 该协议不需要包含任何内容 可能是
  • 当拥有 @objcMembers 私有动态变量时 @objc 冗余?

    因此 我将 Realm 与 Swift 结合使用 并使用 objcMembers 关键字标记我的类 但是当我尝试创建一些私有变量时 Xcode 强制我在这些私有变量旁边添加 objc 这是有意的行为吗 看来这对我来说是多余的 objcMem
  • deepcopy 不尊重元类

    我有一堂课 根据设计 必须遵循单例图案 所以我继续使用元类 一切都运行良好 直到报告了一个错误 总而言之 deepcopy ied 我的实例单例类不是相同的实例 我可以通过从基础继承来解决这个错误单例 type 类 但我宁愿不这样做 原因在