gpt4 book ai didi

python - 扩展类不能 pickle

转载 作者:行者123 更新时间:2023-12-04 09:35:51 25 4
gpt4 key购买 nike

我设计了一种以编程方式从类继承的方法,因此基本上扩展了一个类。它工作得很好。但是,我需要对类进行 pickle ,这是不可能的,因为扩展类是在函数中定义的。
这是扩展类的玩具示例:

import pickle

class A():
pass

def extend_class(base_class):
class B(base_class):
def hello(self):
print('Yo!')

return B

extended_class = extend_class(A)

b = extended_class()
b.hello()
但是,如果我这样做
pickle.dump(b, open('extended_class.pickle', 'w'))
这返回:
AttributeError: Can't pickle local object 'extend_class.<locals>.B'
任何解决方法?我不一定需要用我的方式来扩展一个类。任何其他方式都是可以接受的,只要我最终能 pickle 类(class)。

最佳答案

您可以在全局域中声明一个类,然后在工厂函数中将其声明为全局,然后覆盖它。
它看起来有点像 hack,可能有更好的方法(也许通过将类直接注入(inject)到类 dict 中),但尽管如此,它是:

import pickle

class A:
pass

class _B:
pass
B = _B

def extend_class(base_class):
global B
class B(base_class):
def hello(self):
print('Yo!')

return B


if __name__ == '__main__':

extended_class = extend_class(A)

b = extended_class()
b.hello()
with open('tst.pickle', "wb") as f:
pickle.dump(b, f)

关于python - 扩展类不能 pickle ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62592010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com