Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / devtools / amd64 / html / python / lib / pickle-sub.html
CommitLineData
920dae64
AT
1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
2<html>
3<head>
4<link rel="STYLESHEET" href="lib.css" type='text/css' />
5<link rel="SHORTCUT ICON" href="../icons/pyfav.png" type="image/png" />
6<link rel='start' href='../index.html' title='Python Documentation Index' />
7<link rel="first" href="lib.html" title='Python Library Reference' />
8<link rel='contents' href='contents.html' title="Contents" />
9<link rel='index' href='genindex.html' title='Index' />
10<link rel='last' href='about.html' title='About this document...' />
11<link rel='help' href='about.html' title='About this document...' />
12<link rel="next" href="pickle-example.html" />
13<link rel="prev" href="pickle-protocol.html" />
14<link rel="parent" href="module-pickle.html" />
15<link rel="next" href="pickle-example.html" />
16<meta name='aesop' content='information' />
17<title>3.14.6 Subclassing Unpicklers </title>
18</head>
19<body>
20<DIV CLASS="navigation">
21<div id='top-navigation-panel' xml:id='top-navigation-panel'>
22<table align="center" width="100%" cellpadding="0" cellspacing="2">
23<tr>
24<td class='online-navigation'><a rel="prev" title="3.14.5.3 Pickling and unpickling"
25 href="node70.html"><img src='../icons/previous.png'
26 border='0' height='32' alt='Previous Page' width='32' /></A></td>
27<td class='online-navigation'><a rel="parent" title="3.14 pickle "
28 href="module-pickle.html"><img src='../icons/up.png'
29 border='0' height='32' alt='Up One Level' width='32' /></A></td>
30<td class='online-navigation'><a rel="next" title="3.14.7 Example"
31 href="pickle-example.html"><img src='../icons/next.png'
32 border='0' height='32' alt='Next Page' width='32' /></A></td>
33<td align="center" width="100%">Python Library Reference</td>
34<td class='online-navigation'><a rel="contents" title="Table of Contents"
35 href="contents.html"><img src='../icons/contents.png'
36 border='0' height='32' alt='Contents' width='32' /></A></td>
37<td class='online-navigation'><a href="modindex.html" title="Module Index"><img src='../icons/modules.png'
38 border='0' height='32' alt='Module Index' width='32' /></a></td>
39<td class='online-navigation'><a rel="index" title="Index"
40 href="genindex.html"><img src='../icons/index.png'
41 border='0' height='32' alt='Index' width='32' /></A></td>
42</tr></table>
43<div class='online-navigation'>
44<b class="navlabel">Previous:</b>
45<a class="sectref" rel="prev" href="node70.html">3.14.5.3 Pickling and unpickling</A>
46<b class="navlabel">Up:</b>
47<a class="sectref" rel="parent" href="module-pickle.html">3.14 pickle </A>
48<b class="navlabel">Next:</b>
49<a class="sectref" rel="next" href="pickle-example.html">3.14.7 Example</A>
50</div>
51<hr /></div>
52</DIV>
53<!--End of Navigation Panel-->
54
55<H2><A NAME="SECTION0051460000000000000000"></A><A NAME="pickle-sub"></A>
56<BR>
573.14.6 Subclassing Unpicklers
58</H2>
59
60<P>
61By default, unpickling will import any class that it finds in the
62pickle data. You can control exactly what gets unpickled and what
63gets called by customizing your unpickler. Unfortunately, exactly how
64you do this is different depending on whether you're using
65<tt class="module">pickle</tt> or <tt class="module">cPickle</tt>.<A NAME="tex2html22"
66 HREF="#foot8987"><SUP>3.10</SUP></A>
67<P>
68In the <tt class="module">pickle</tt> module, you need to derive a subclass from
69<tt class="class">Unpickler</tt>, overriding the <tt class="method">load_global()</tt>
70method. <tt class="method">load_global()</tt> should read two lines from the pickle
71data stream where the first line will the name of the module
72containing the class and the second line will be the name of the
73instance's class. It then looks up the class, possibly importing the
74module and digging out the attribute, then it appends what it finds to
75the unpickler's stack. Later on, this class will be assigned to the
76<tt class="member">__class__</tt> attribute of an empty class, as a way of magically
77creating an instance without calling its class's <tt class="method">__init__()</tt>.
78Your job (should you choose to accept it), would be to have
79<tt class="method">load_global()</tt> push onto the unpickler's stack, a known safe
80version of any class you deem safe to unpickle. It is up to you to
81produce such a class. Or you could raise an error if you want to
82disallow all unpickling of instances. If this sounds like a hack,
83you're right. Refer to the source code to make this work.
84
85<P>
86Things are a little cleaner with <tt class="module">cPickle</tt>, but not by much.
87To control what gets unpickled, you can set the unpickler's
88<tt class="member">find_global</tt> attribute to a function or <code>None</code>. If it is
89<code>None</code> then any attempts to unpickle instances will raise an
90<tt class="exception">UnpicklingError</tt>. If it is a function,
91then it should accept a module name and a class name, and return the
92corresponding class object. It is responsible for looking up the
93class and performing any necessary imports, and it may raise an
94error to prevent instances of the class from being unpickled.
95
96<P>
97The moral of the story is that you should be really careful about the
98source of the strings your application unpickles.
99
100<P>
101<BR><HR><H4>Footnotes</H4>
102<DL>
103<DT><A NAME="foot8987">...cPickle.</A><A
104 href="pickle-sub.html#tex2html22"><SUP>3.10</SUP></A></DT>
105<DD>A word of caution: the
106mechanisms described here use internal attributes and methods, which
107are subject to change in future versions of Python. We intend to
108someday provide a common interface for controlling this behavior,
109which will work in either <tt class="module">pickle</tt> or <tt class="module">cPickle</tt>.
110
111</DD>
112</DL>
113<DIV CLASS="navigation">
114<div class='online-navigation'>
115<p></p><hr />
116<table align="center" width="100%" cellpadding="0" cellspacing="2">
117<tr>
118<td class='online-navigation'><a rel="prev" title="3.14.5.3 Pickling and unpickling"
119 href="node70.html"><img src='../icons/previous.png'
120 border='0' height='32' alt='Previous Page' width='32' /></A></td>
121<td class='online-navigation'><a rel="parent" title="3.14 pickle "
122 href="module-pickle.html"><img src='../icons/up.png'
123 border='0' height='32' alt='Up One Level' width='32' /></A></td>
124<td class='online-navigation'><a rel="next" title="3.14.7 Example"
125 href="pickle-example.html"><img src='../icons/next.png'
126 border='0' height='32' alt='Next Page' width='32' /></A></td>
127<td align="center" width="100%">Python Library Reference</td>
128<td class='online-navigation'><a rel="contents" title="Table of Contents"
129 href="contents.html"><img src='../icons/contents.png'
130 border='0' height='32' alt='Contents' width='32' /></A></td>
131<td class='online-navigation'><a href="modindex.html" title="Module Index"><img src='../icons/modules.png'
132 border='0' height='32' alt='Module Index' width='32' /></a></td>
133<td class='online-navigation'><a rel="index" title="Index"
134 href="genindex.html"><img src='../icons/index.png'
135 border='0' height='32' alt='Index' width='32' /></A></td>
136</tr></table>
137<div class='online-navigation'>
138<b class="navlabel">Previous:</b>
139<a class="sectref" rel="prev" href="node70.html">3.14.5.3 Pickling and unpickling</A>
140<b class="navlabel">Up:</b>
141<a class="sectref" rel="parent" href="module-pickle.html">3.14 pickle </A>
142<b class="navlabel">Next:</b>
143<a class="sectref" rel="next" href="pickle-example.html">3.14.7 Example</A>
144</div>
145</div>
146<hr />
147<span class="release-info">Release 2.4.2, documentation updated on 28 September 2005.</span>
148</DIV>
149<!--End of Navigation Panel-->
150<ADDRESS>
151See <i><a href="about.html">About this document...</a></i> for information on suggesting changes.
152</ADDRESS>
153</BODY>
154</HTML>