2015-11-06 24 views
0

我不知道如何序列化。從衝浪中,我開始知道蒔蘿可以序列化函數和類。下面有一個例子,其中有兩個類,每個類都有一些具有不同參數的函數。我想把它們串在一起。有人可以幫助我進入這個在python中序列化函數/類

class dummy_class_1: 
    def dummy_func_1(self,master): 
    .. 

    def dummy_func_2(self): 
    ... 

class dummy_class_2: 
    def dummy_func_3(self,event): 
    ... 

    def dummy_func_4(self): 
    ... 

回答

0

如果你想在類序列在一起,那麼你可以dump他們的字符串:

>>> class dummy_class_1(object): 
... def dummy_func_1(self, master): 
...  return 
... def dummy_func_2(self): 
...  return 
... 
>>> class dummy_class_2(object): 
... def dummy_func_3(self, event): 
...  return 
... def dummy_func_4(self): 
...  return 
... 
>>> import dill 
>>>   
>>> dill.dumps((dummy_class_1, dummy_class_2)) 
'\x80\x02cdill.dill\n_create_type\nq\x00(cdill.dill\n_load_type\nq\x01U\x08TypeTypeq\x02\x85q\x03Rq\x04U\rdummy_class_1q\x05h\x01U\nObjectTypeq\x06\x85q\x07Rq\x08\x85q\t}q\n(U\n__module__q\x0bU\x08__main__q\x0cU\x0cdummy_func_1q\rcdill.dill\n_create_function\nq\x0e(cdill.dill\n_unmarshal\nq\x0fUpc\x02\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00C\x00\x00\x00s\x04\x00\x00\x00d\x00\x00S(\x01\x00\x00\x00N(\x00\x00\x00\x00(\x02\x00\x00\x00t\x04\x00\x00\x00selft\x06\x00\x00\x00master(\x00\x00\x00\x00(\x00\x00\x00\x00s\x07\x00\x00\x00<stdin>t\x0c\x00\x00\x00dummy_func_1\x02\x00\x00\x00s\x02\x00\x00\x00\x00\x01q\x10\x85q\x11Rq\x12c__builtin__\n__main__\nh\rNN}q\x13tq\x14Rq\x15U\x0cdummy_func_2q\x16h\x0e(h\x0fUec\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00C\x00\x00\x00s\x04\x00\x00\x00d\x00\x00S(\x01\x00\x00\x00N(\x00\x00\x00\x00(\x01\x00\x00\x00t\x04\x00\x00\x00self(\x00\x00\x00\x00(\x00\x00\x00\x00s\x07\x00\x00\x00<stdin>t\x0c\x00\x00\x00dummy_func_2\x04\x00\x00\x00s\x02\x00\x00\x00\x00\x01q\x17\x85q\x18Rq\x19c__builtin__\n__main__\nh\x16NN}q\x1atq\x1bRq\x1cU\x07__doc__q\x1dNutq\x1eRq\x1fh\x00(h\x04U\rdummy_class_2q h\x08\x85q!}q"(h\x0bh\x0cU\x0cdummy_func_3q#h\x0e(h\x0fUoc\x02\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00C\x00\x00\x00s\x04\x00\x00\x00d\x00\x00S(\x01\x00\x00\x00N(\x00\x00\x00\x00(\x02\x00\x00\x00t\x04\x00\x00\x00selft\x05\x00\x00\x00event(\x00\x00\x00\x00(\x00\x00\x00\x00s\x07\x00\x00\x00<stdin>t\x0c\x00\x00\x00dummy_func_3\x02\x00\x00\x00s\x02\x00\x00\x00\x00\x01q$\x85q%Rq&c__builtin__\n__main__\nh#NN}q\'tq(Rq)U\x0cdummy_func_4q*h\x0e(h\x0fUec\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00C\x00\x00\x00s\x04\x00\x00\x00d\x00\x00S(\x01\x00\x00\x00N(\x00\x00\x00\x00(\x01\x00\x00\x00t\x04\x00\x00\x00self(\x00\x00\x00\x00(\x00\x00\x00\x00s\x07\x00\x00\x00<stdin>t\x0c\x00\x00\x00dummy_func_4\x04\x00\x00\x00s\x02\x00\x00\x00\x00\x01q+\x85q,Rq-c__builtin__\n__main__\nh*NN}q.tq/Rq0h\x1dNutq1Rq2\x86q3.' 

或者,你可以將它們dump到一個文件.. 。

>>> with open('dummy.pkl', 'wb') as f: 
... dill.dump(dummy_class_1, f) 
... dill.dump(dummy_class_2, f) 
... 
>>> 

然後當你重新啓動,你可以load他們:

Python 2.7.10 (default, Sep 2 2015, 17:36:25) 
[GCC 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.40)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import dill 
>>> with open('dummy.pkl', 'rb') as f: 
... dummy_class_1 = dill.load(f) 
... dummy_class_2 = dill.load(f) 
... 
>>> print dill.source.getsource(dummy_class_1) 
class dummy_class_1(object): 
    def dummy_func_1(self, master): 
    return 
    def dummy_func_2(self): 
    return 

>>> 

類方法(即,類中的函數)將在類中被序列化。

請注意,我在我的回覆中使用了Python 2.7,但它對python 3.x的工作原理完全相同。

+0

謝謝!我基本上正在開發使用python的GUI(tkinter),在那裏我認爲保存按鈕應該保存GUI的狀態,一旦加載,它應該從該狀態加載GUI。 你認爲序列化類會幫助 – user5517005

+0

這取決於。某些類實例比其他類更難以序列化,但如果類是從其他文件導入並通過引用進行pickle的話,它們通常應該可以工作。 –

+0

我們如何醃漬參考...我是一個新手 – user5517005