python类的属性怎么添加列表_如何在向Python类添加属性时更新pickled对象

我定义了一个Python3类,然后使用pickle序列化一个实例并将其保存到文件中。后来我在类中添加了另一个实例属性,但是我意识到如果我加载实例并尝试引用该属性,我将得到一个“objecthasnotattribute”错误,因为实例是在没有它的情况下构建的。向pickled对象添加新属性并对其进行配置的最佳选项是什么?在

在代码中,我定义了一个类# First definition

class Foo:

def __init__(self, params):

# define and initialize attributes

def print_number(self):

print(2)

我使用pickle创建并序列化一个实例,并将其保存到文件中

^{pr2}$

然后我希望我的类有点不同,所以我更新了它的定义:# Updated definition

class Foo:

def __init__(self, params):

# define and initialize attributes

self.bar = "baz" # bar is a new attribute

def print_number(self):

print(3) # prints 3 instead of 2

然后加载实例并尝试调用一些方法import pickle

with open("filename", 'rb') as f:

inst = pickle.load(f)

inst.print_number()

print(inst.bar)

由于pickle不保存方法定义,所以实例方法的行为被更新,因此inst.print_number()打印3,而不是{}。但是,引用inst.bar会导致“Object has no attribute”错误,因为inst是在{}的定义中具有该属性之前初始化的。在

更新

对于我来说,这是一个很难回答的问题,我没有意识到Python允许你做一些类似inst.bar = "baz"的事情并动态地设置(我来自一个Java背景,在那里所有的事情都必须从一开始就被修复)。我仍然对如何正确地执行此操作和/或Pythonicaly和/或pickle特别感兴趣,特别是在可能需要多个类更新的情况下。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值