【发布时间】:2021-08-13 02:58:52
【问题描述】:
我的最终目标是拥有一个具有常规构造函数的类,而且还有一个可用于创建该类的部分实例化版本的第二个构造函数。
class Foo(object):
def __init__(self, foo, bar):
self.foo = foo
self.bar = bar
def create_partial(self, **kwargs):
self.foo = kwargs.get('foo', None)
self.bar = kwargs.get('bar', None)
我注意到 pickle 以某种方式实现了这一点。您可以编写仅处理其中一个参数的 __getstate__ 和 __setstate__ 函数,而忽略您尚未定义其中之一的事实。例如
class Foo(object):
def__init__(self, foo, bar):
self.foo = foo
self.bar = bar
def __getstate__(self):
return {'foo': self.foo}
def __setstate__(self, d):
self.foo = d['foo']
然后我可以pickle和unpickle一个实例来获得一个半实例化的对象
myfoo = pickle.loads(pickle.dumps(Foo(1,2)))
print(myfoo.foo) # 1
print(myfoo.bar) # throws AttributeError
type(myfoo) # __main__.Foo
所以,我的问题是,它如何设法获得一个空白类实例,将其实例化一半并让它仍然将其类型报告为 Foo,此外,我怎样才能在不经过 pickle 的情况下做同样的事情?
附:我知道这是一件想要做的疯狂的事情,但我想知道如何
【问题讨论】: