<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>2.2.9.4 Methods </title> <META NAME="description" CONTENT="2.2.9.4 Methods "> <META NAME="keywords" CONTENT="lib"> <META NAME="resource-type" CONTENT="document"> <META NAME="distribution" CONTENT="global"> <meta http-equiv="Content-Type" content="text/html; charset="> <link rel="STYLESHEET" href="lib.css"> <link rel="first" href="lib.html"> <link rel="contents" href="contents.html" title="Contents"> <link rel="index" href="genindex.html" title="Index"> <LINK REL="next" href="bltin-code-objects.html"> <LINK REL="previous" href="typesfunctions.html"> <LINK REL="up" href="typesother.html"> <LINK REL="next" href="bltin-code-objects.html"> </head> <body> <DIV CLASS="navigation"> <table align="center" width="100%" cellpadding="0" cellspacing="2"> <tr> <td><A href="typesfunctions.html"><img src="../icons/previous.gif" border="0" height="32" alt="Previous Page" width="32"></A></td> <td><A href="typesother.html"><img src="../icons/up.gif" border="0" height="32" alt="Up One Level" width="32"></A></td> <td><A href="bltin-code-objects.html"><img src="../icons/next.gif" border="0" height="32" alt="Next Page" width="32"></A></td> <td align="center" width="100%">Python Library Reference</td> <td><A href="contents.html"><img src="../icons/contents.gif" border="0" height="32" alt="Contents" width="32"></A></td> <td><a href="modindex.html" title="Module Index"><img src="../icons/modules.gif" border="0" height="32" alt="Module Index" width="32"></a></td> <td><A href="genindex.html"><img src="../icons/index.gif" border="0" height="32" alt="Index" width="32"></A></td> </tr></table> <b class="navlabel">Previous:</b> <a class="sectref" href="typesfunctions.html">2.2.9.3 Functions</A> <b class="navlabel">Up:</b> <a class="sectref" href="typesother.html">2.2.9 Other Built-in Types</A> <b class="navlabel">Next:</b> <a class="sectref" href="bltin-code-objects.html">2.2.9.5 Code Objects</A> <br><hr> </DIV> <!--End of Navigation Panel--> <H3><A NAME="SECTION004294000000000000000"> </A> <BR> 2.2.9.4 Methods </H3> <a name="l2h-181"> </a> <P> Methods are functions that are called using the attribute notation. There are two flavors: built-in methods (such as <tt class="method">append()</tt> on lists) and class instance methods. Built-in methods are described with the types that support them. <P> The implementation adds two special read-only attributes to class instance methods: <code><var>m</var>.im_self</code> is the object on which the method operates, and <code><var>m</var>.im_func</code> is the function implementing the method. Calling <code><var>m</var>(<var>arg-1</var>, <var>arg-2</var>, ..., <var>arg-n</var>)</code> is completely equivalent to calling <code><var>m</var>.im_func(<var>m</var>.im_self, <var>arg-1</var>, <var>arg-2</var>, ..., <var>arg-n</var>)</code>. <P> Class instance methods are either <i>bound</i> or <i>unbound</i>, referring to whether the method was accessed through an instance or a class, respectively. When a method is unbound, its <code>im_self</code> attribute will be <code>None</code> and if called, an explicit <code>self</code> object must be passed as the first argument. In this case, <code>self</code> must be an instance of the unbound method's class (or a subclass of that class), otherwise a <code>TypeError</code> is raised. <P> Like function objects, methods objects support getting arbitrary attributes. However, since method attributes are actually stored on the underlying function object (<code>meth.im_func</code>), setting method attributes on either bound or unbound methods is disallowed. Attempting to set a method attribute results in a <code>TypeError</code> being raised. In order to set a method attribute, you need to explicitly set it on the underlying function object: <P> <dl><dd><pre class="verbatim"> class C: def method(self): pass c = C() c.method.im_func.whoami = 'my name is c' </pre></dl> <P> See the <em class="citetitle"><a href="../ref/ref.html" title="Python Reference Manual" >Python Reference Manual</a></em> for more information. <P> <DIV CLASS="navigation"> <p><hr> <table align="center" width="100%" cellpadding="0" cellspacing="2"> <tr> <td><A href="typesfunctions.html"><img src="../icons/previous.gif" border="0" height="32" alt="Previous Page" width="32"></A></td> <td><A href="typesother.html"><img src="../icons/up.gif" border="0" height="32" alt="Up One Level" width="32"></A></td> <td><A href="bltin-code-objects.html"><img src="../icons/next.gif" border="0" height="32" alt="Next Page" width="32"></A></td> <td align="center" width="100%">Python Library Reference</td> <td><A href="contents.html"><img src="../icons/contents.gif" border="0" height="32" alt="Contents" width="32"></A></td> <td><a href="modindex.html" title="Module Index"><img src="../icons/modules.gif" border="0" height="32" alt="Module Index" width="32"></a></td> <td><A href="genindex.html"><img src="../icons/index.gif" border="0" height="32" alt="Index" width="32"></A></td> </tr></table> <b class="navlabel">Previous:</b> <a class="sectref" href="typesfunctions.html">2.2.9.3 Functions</A> <b class="navlabel">Up:</b> <a class="sectref" href="typesother.html">2.2.9 Other Built-in Types</A> <b class="navlabel">Next:</b> <a class="sectref" href="bltin-code-objects.html">2.2.9.5 Code Objects</A> <hr> <span class="release-info">Release 2.2, documentation updated on December 21, 2001.</span> </DIV> <!--End of Navigation Panel--> <ADDRESS> See <i><a href="about.html">About this document...</a></i> for information on suggesting changes. </ADDRESS> </BODY> </HTML>