On 6/28/2011 11:35 AM, Michael Foord wrote: > On 28/06/2011 16:23, Terry Reedy wrote: >> So-called 'staticmethods' are not really methods either, but are class >> function attributes that are just functions and not treated as >> methods. The decorator that negates normal method treatment >> could/should have been called 'non_method'. >> >> Using 'function' is its generic 'callable' sense ... >> >> Method: a class function attribute that in its intended and normal use >> automagically turns the object it is called on into its first arg. >> 'Method' is a useful and needed subcategory of class attribute >> precisely because of this behavior. >> >> Instance method: a class function attribute that is (normally) called >> on instances of the class or subclasses. Before 2.2, these were the only methods. > So what is the difference between "Instance method" and "Method" above? > Is it just that "Method" is broader and includes class methods Since 2.2, yes. The current glossary entry starts "method A function which is defined inside a class body." This includes 'staticmethods', but as I have said, I think that is a mistake. Static methods are functions without special method treatment. A class staticmethod function act the same as any other function. Also, 'defined inside' is not necessary. I would change the above to "A function that get bound to a instance or class when called as an attribute of the instance or class. Methods are usually defined inside a class body." > and bound methods? The result of accessing an instance or class method via an instance or class. Accessing a static method does not create a bound method. Bound methods are usually anonymous and ephemeral, being used for one call and then deleted. > If anyone said "instance method" to me I would assume they meant bound > method. (A normal method fetched from an instance.) Instance methods are the 'permanent' class function attributes, not the ephemeral object that implements a.b(c). Bound methods would be an implementation detail, except that a.b has to evaluate to something and saving bound methods is quite handy when calling a method or methods repeatedly on the same instance. Functools.partial is a generalization of bound methods, which were Python's first (special-case) implementation of the partial function idea. Leaving out implementation details, if b is a function attribute of type(a), 'a.b' is an abbreviated way of writing 'functools.partial(type(a).b,a)' (and yes, I have tested an example of this). >> Class method: a class function attribute that is (normally) called on >> the class or subclasses. >> >> Bound method: a method that has already has the first-arg object >> bundled with it, so that it can be used as a normal (partial or >> curried) function. --- Terry Jan Reedy
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4