3
在我的類的實例化過程中,我初始化了一些不可挑選的字段。因此,爲了能夠(正確)醃製我的課程,我希望我的init方法可以在取消調用時調用。看起來,這似乎與舊式課程一樣。不可能用kwargs打發新風格?
隨着新風格的課程,我需要使用__new__
和__getnewargs__
。這是我做的:
import cPickle
class Blubb(object):
def __init__(self, value):
self.value = value
class Bla(Blubb):
def __new__(cls, value):
instance = super(Bla, cls).__new__(cls)
instance.__init__(value)
return instance
def __getnewargs__(self):
return self.value,
def __getstate__(self):
return {}
def __setstate__(self, dct):
pass
x = Bla(2)
print x.value
pickled = cPickle.dumps(x, 2)
x_ = cPickle.loads(pickled)
assert x_.value == 2
這將是罰款,如果不是事實,obj = C.__new__(C, *args)
。現在有**kwargs
。所以我限制在我的__new__
和__init__
方法中的非關鍵字參數。
有誰知道一種方法來解決這個問題?這真的很不方便。