forked from jdb/jdb.github.com
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmissing_method.html
142 lines (134 loc) · 6.93 KB
/
missing_method.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
<!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>Missing 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="Class method and static method" href="classmethod.html" />
<link rel="prev" title="Surprising imports" href="package.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="classmethod.html" title="Class method and static method"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="package.html" title="Surprising imports"
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="package.html"
title="previous chapter">Surprising imports</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="classmethod.html"
title="next chapter">Class method and static method</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="sources/missing_method.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="missing-method">
<h1>Missing method<a class="headerlink" href="#missing-method" title="Permalink to this headline">¶</a></h1>
<p>I have heard that in Ruby there is a conventional method which is
automatically called when a method is missing. You can put code there
which will be executed whenever you call a missing method. In Python,
there is a similar mechanism exist, but there is one more
indirection. If a missing method is called, <em>self.__getattr__</em> will
be called and it needs to return a callable which itself will be
called in place of the missing method.</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="k">class</span> <span class="nc">toto</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">method</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">string</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">return</span> <span class="n">string</span>
<span class="gp">...</span>
<span class="gp">... </span> <span class="k">def</span> <span class="nf">missing_method</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="o">*</span><span class="n">args</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">return</span> <span class="s">"Warning: method does not exists (you gave </span><span class="si">%s</span><span class="s">)"</span> <span class="o">%</span> <span class="n">args</span>
<span class="gp">...</span>
<span class="gp">... </span> <span class="k">def</span> <span class="nf">__getattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">missing_method</span>
<span class="gp">...</span>
</pre></div>
</div>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">t</span> <span class="o">=</span> <span class="n">toto</span><span class="p">()</span>
<span class="gp">>>> </span><span class="k">print</span> <span class="n">t</span><span class="o">.</span><span class="n">method</span><span class="p">(</span><span class="s">"Hello World"</span><span class="p">)</span>
<span class="go">Hello World</span>
<span class="gp">>>> </span><span class="k">print</span> <span class="n">t</span><span class="o">.</span><span class="n">unexisting_method</span><span class="p">(</span><span class="s">"knock knock knock"</span><span class="p">)</span>
<span class="go">Warning: method does not exists (you gave knock knock knock)</span>
</pre></div>
</div>
<p><em>10 May 2010</em></p>
</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="classmethod.html" title="Class method and static method"
>next</a> |</li>
<li class="right" >
<a href="package.html" title="Surprising imports"
>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>