[英]Python: Pickle derived classes as if they were an instance of the base class
我想定义一个基类,以便在派生类实例被pickle时,它们被腌制,好像它们是基类的实例一样。 这是因为派生类可能存在于酸洗的客户端而不存在于服务器端,但这对服务器来说并不重要,因为它只需要来自基类的信息。 我不想为每个客户端动态创建类。
基类只是一个“对象句柄”,它包含一个ID,在服务器上定义了方法,但我希望客户端能够子类化服务器类并定义新方法(只能由客户端看到,但那没关系)。
您可以在Python中动态更改对象的类:
import cPickle as pickle
class Foo(object):
def __init__(self):
self.id=1
class Bar(Foo):
def derived_class_method(self): pass
bar=Bar()
bar.id=2
bar.__class__=Foo # changes `bar`'s class to Foo
bar_pickled=pickle.dumps(bar)
bar2=pickle.loads(bar_pickled)
bar.__class__=Bar # reset `bar`'s class to Bar
print(repr(bar2))
# <__main__.Foo object at 0xb76b08ec>
print(bar2.id)
# 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.