forked from jdb/jdb.github.com
-
Notifications
You must be signed in to change notification settings - Fork 0
/
classmethod.html
159 lines (151 loc) · 7.77 KB
/
classmethod.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Class method and static method — bits v0.7 documentation</title>
<link rel="stylesheet" href="static/sphinxdoc.css" type="text/css" />
<link rel="stylesheet" href="static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '',
VERSION: '0.7',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="static/jquery.js"></script>
<script type="text/javascript" src="static/underscore.js"></script>
<script type="text/javascript" src="static/doctools.js"></script>
<link rel="top" title="bits v0.7 documentation" href="index.html" />
<link rel="next" title="Suppressing duplicates in a list" href="dup.html" />
<link rel="prev" title="Missing method" href="missing_method.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="dup.html" title="Suppressing duplicates in a list"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="missing_method.html" title="Missing method"
accesskey="P">previous</a> |</li>
<li><a href="index.html">bits v0.7 documentation</a> »</li>
</ul>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<h4>Previous topic</h4>
<p class="topless"><a href="missing_method.html"
title="previous chapter">Missing method</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="dup.html"
title="next chapter">Suppressing duplicates in a list</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="sources/classmethod.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<div class="section" id="class-method-and-static-method">
<h1>Class method and static method<a class="headerlink" href="#class-method-and-static-method" title="Permalink to this headline">¶</a></h1>
<p>A class method is a method bound to a class and not to an instance.</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="k">class</span> <span class="nc">MyFantasticClass</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">def</span> <span class="nf">interrupt</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">print</span> <span class="s">'Or a woman !'</span>
<span class="gp">>>> </span><span class="n">m</span> <span class="o">=</span> <span class="n">MyFantasticClass</span><span class="p">()</span>
<span class="gp">>>> </span><span class="n">m</span><span class="o">.</span><span class="n">interrupt</span><span class="p">()</span>
<span class="go">Or a woman !</span>
</pre></div>
</div>
<p>The <em>interrupt</em> function is an instance function, it receives self as an
argument. This is not adapted here, because for the function to be
used, an instance must be created: even though the <em>interrupt</em> method does
not make use of the instance, it is passed as an input parameter to
the function.</p>
<p><strong>How to define the *interrupt* method so that it is called directly on
the class without having to create an instance?</strong></p>
<p>Example :</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">MyFantasticClass</span><span class="o">.</span><span class="n">interrupt</span><span class="p">()</span>
</pre></div>
</div>
<p>Answer: use a <em>class method</em> or even better a <em>static method</em>. The
class method:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="k">class</span> <span class="nc">MyFantasticClass</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="gp">... </span> <span class="nd">@classmethod</span>
<span class="gp">... </span> <span class="k">def</span> <span class="nf">interrupt</span><span class="p">(</span> <span class="n">klass</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">print</span> <span class="s">'Or a woman !'</span>
<span class="gp">>>> </span><span class="n">MyFantasticClass</span><span class="o">.</span><span class="n">interrupt</span><span class="p">()</span>
<span class="go">Or a woman !</span>
</pre></div>
</div>
<p>For the user of the class, it dos not make much of a difference if the
function is bound to the class or just static, but it changes the
definition. The class method is passed the class as the first argument
(and not <em>self</em>, the instance). In our example, the best choice is a
<em>static</em> method since the function uses neither the instance nor the
class:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="k">class</span> <span class="nc">MyFantasticClass</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="gp">... </span> <span class="nd">@staticmethod</span>
<span class="gp">... </span> <span class="k">def</span> <span class="nf">interrupt</span><span class="p">():</span>
<span class="gp">... </span> <span class="k">print</span> <span class="s">'Or a woman !'</span>
<span class="gp">>>> </span><span class="n">MyFantasticClass</span><span class="o">.</span><span class="n">interrupt</span><span class="p">()</span>
<span class="go">Or a woman !</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="dup.html" title="Suppressing duplicates in a list"
>next</a> |</li>
<li class="right" >
<a href="missing_method.html" title="Missing method"
>previous</a> |</li>
<li><a href="index.html">bits v0.7 documentation</a> »</li>
</ul>
</div>
<div class="footer">
© Copyright 2009, Jean Daniel Browne.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.
</div>
</body>
</html>