可以从老被转换为新的样式后Unpickle类的实例?

在Python中,是否有可能unpickle,正在转变为新型的那些腌制后作为旧式Python类对象? (也就是说,对象用不同的“类特征”)。 *

例如,假设某些情况下被保存为:

class foo: # old style

和类改为从对象继承之后再腌制几个对象:

class foo(object): # new style

这是对象pickle.dump “一个版可以pickle.load ”由同一个样式类编,但是没有人会同时加载。 我认为,基于遗传变化泡菜使用的策略(从对象继承的类有一个__reduce__方法自动定义,但没有继承一个没有)。 当试图从代码加载与继承老泡菜没有继承(旧式定义),我得到尽可能看到这太问题同样的论点的错误; 即使第二个参数是多余的,它仍然改变了“阶级签名”和预期的论点,并防止加载。 为了解决这个问题,我很乐意写Unpickler会,但恐怕它可能涉及两个独立的子类的unpickle一拉的文档......如果我知道如何正确unpickle每个人,我会做罚款那。

一些背景知识对我的情况......我使用TrialHandler类来保存和重新加载按键和反应时间为行为心理学实验。 我们重构了TrialHandler类从更抽象,baseTrialHandler继承,但这样做暂时改变类签名从对象继承。 但是,我们不能unpickle老年trial_handler文件,因此它被改回来。 我想看看从使用试用处理程序的两个版本上运行同样的实验数据,因此要unpickle两种类型保存日志文件在同一脚本。

另外,如果我不能写一个自定义Unpickler会,将unpickle两个对象,有另一种方式来序列化呢? 我试图倾销直YAML,但它看起来像我将不得不注册类的东西,可以yaml'ized,反正。

与特定错误的问题的完整说明,PsychoPy邮件列表上。 任何博客文章解释细节中间酸洗,甚至蟒蛇继承,将是最受欢迎的; 我发现的最接近是为什么酸洗是不安全的酸洗描述为一个“简单的基于堆栈的虚拟机”,这是很好的一个很好的解释,但没有得到我足够找出unpicking自己连基础知识。

--------------解决方案-------------

去为部分:1)不存在所谓的“类签名”Python中的事情,虽然我从你的问题2的想法)从“对象”,在Python 2程序不继承应被视为一个错误。 不从对象继承的类 - 老式类是少了很多一致的 - wher只是不停的语言向后兼容,当其中Python 2.2中引入的(大约一年2000/2001)新式类也被称为“旧式”班并且缺乏许多功能,使今天的蟒蛇这么好的语言。

有了这样的方式:unpickle会尽量根据类限定名unpickle的对象-在作为上似乎对象的。 __class__.__name__在酸洗时间属性。 因此,它是可能有上unpickle异常(它会引发类型错误)一个天真的方式,用相同的名字换了可用的类,然后重新尝试unpickle操作:你的类应该从“对象”继承(更具体地说,有“型”基于元类)

至于我所说,juust一起写东西的例子:

try:
new_obj = pickle.load(data_stream)
except TypeError: # if you know this was caused due to the new version of "Foo" class:
current_foo = foomodule.Foo
foomodule.Foo = foomodule.OldFoo
new_obj = pickle.load(data_stream)
foomodule.Foo = current_foo

分类:蟒蛇 时间:2012-01-09 人气:0
本文关键词: 蟒蛇,继承,咸菜
分享到:

相关文章

  • 蟒蛇 - 继承 - Facebook应用程序 2013-08-30

    我有一个关于如何在Python运行继承的代码问题. 它可能看起来像一个伪问题,不知怎么的,但我一个新的Python的. 这从我工作的一些Facebook应用程序的代码片段: class BaseHandler(webapp.RequestHandler): facebook = None user = None def initialize(self, request, response): """General initialization for every reques

  • 蟒蛇继承和__init__功能 2014-05-15

    我碰到的代码folloqing类型寻找一些PyQt的例子时: class DisplayPage(QWizardPage): def __init__(self, *args): apply(QWizardPage.__init__, (self, ) + args) 什么是*的args是什么意思? 使用适用于这种类型的代码的目的是什么? --------------解决方案------------- *args意味着__init__使用任意数量的位置参数,所有这些都将被存储在列表中args 欲

  • 用Cython和深度拷()愁楚与引用的方法/函数。 任何其他的想法? 2014-03-20

    我一直在玩用Cython最近的速度提升,但我的项目继承,有一个模块copy()它使用的方法deepcopy() 我试图实现deepcopy()的overrided版本中copy()我想我有它的工作,但它并不显得了. TypeError: object.__new__(cython_binding_builtin_function_or_method) is not safe, use cython_binding_builtin_function_or_method.__new__() 这是发生

  • 什么是重要的语言特性的Python(成语),了解早期 2012-06-22

    这个问题已经有了答案在这里: Python中的禅[关闭] 22回答 Python的:我失去了一些东西? [关闭] 16回答 我会有兴趣知道什么是StackOverflow的社会认为是重要的语言功能的Python(成语). 功能将定义一个程序员的Python的. 蟒蛇(Python化)成语 - "代码的表达",也就是自然的或特性的Python语言. 另外,应该都是Python程序员知道哪个成语早吗? 提前致谢 有关: 代码像Pythonista:地道的Python Python的:我失去

  • 移动从Java到Python 2012-11-04

    我有一个初中起点谁是从Java背景的. 作为一家公司,我们现在正专注于Python开发(尽管有一些传统系统在Java中徘徊). 我环顾四周的提示和资源,帮助过渡,并想知道你们这里有一个新手任何有用的提示. 干杯. --------------解决方案------------- 让他读 新手指南的Python Python的Java程序员 考虑阅读的接受了这个问题的答案指向这些东西给他 爪哇 - > Python列表的一些功能Java没有 两篇文章讨论了不同一般的方法 Python是不是Java

  • 如何使用废料形成的网址 2013-03-12

    我的models.py文件看起来像这样 from django.db import models from django.template.defaultfilters import slugify class Entertainmentblog(models.Model): slug = models.SlugField(max_length=100) body = models.TextField() posted = models.DateTimeField('date published

  • 如何咸菜和一个类继承自defaultdict的unpickle实例? 2012-01-20

    我有一个类继承自defaultdict是这样的: class listdict(defaultdict): def __init__(self): defaultdict.__init__(self, list) 我可以腌制,但是当我unpickle它,出现这种情况: ('__init__() takes exactly 1 argument (2 given)', <class 'listdict'>, (<type 'list'>,)) 这个类没有定义泡菜协议中的任何特殊方法.

  • 覆盖类的方法,而不继承(蟒蛇) 2013-09-11

    首先,如果你们认为我想做事的方式不符合Python,可随时提供替代建议. 我有一个对象,其功能需要根据外界事件来改变. 我一直在做的本来就是创建一个新的对象,从原来的继承(让我们称之为OrigObject()并覆盖了改变方法(我们称之为新对象NewObject() 然后我修改两个构造使得它们可以在其他类型的完整的对象填写根据传入的对象自己的价值观. 然后,当我需要改变的功能,我只是执行myObject = NewObject(myObject) . 我开始看到一些问题,这种方法了. 首先,引用该

  • 代表团VS继承蟒蛇 2014-01-28

    我刚才碰到代表团蟒蛇,不能换我的头周围代表团和继承之间的区别. 为什么一个会想使用委派而不是继承? --------------解决方案------------- 代表团是由哪里委派任务从一类客场另外一个强有力的机制. 这样做的主要好处是改变你的类将不会向下的一个或任何其他人. 此外,如果你没有得到这个原则你的类可能做得比他们应该. 我的意思是你得到一个类做一些事情,很可能是最好远离封装到另一个,然后可以使用代表团做同样的事情. 只是想在一些资源抛出:http://code.activestat

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.292 (s). 10 q(s)