replace a method in class: how?
Bruno Desthuilliers
onurb at xiludom.gro
Tue Jun 27 04:42:45 EDT 2006
Maric Michaud wrote:
> Le mardi 27 juin 2006 06:21, Bruno Desthuilliers a écrit :
>
>>Maric Michaud a écrit :
>>(snip)
>>
>>
>>>In OOP Methods are defined in *classes* not in any arbitrary object
>>
>>Chapter and verse, please ? AFAIK, the first O in OOP stands for
>>"object", not for "class" !-)
>>
>
> Hard to find it, indeed.
>
>
>>Classes are just an implementation convenience, and the fact that the
>>class-based model is the most usual one doesn't imply it's the only
>>valid one.
>
> Maybe, never been told of another one, do you think of javascript prototypes ?
There other prototype-based languages. And truth is that while having
classes, Python's object model is much more closer to javascript's one
than to Java or C++.
> Well, there are no methods in this model, only functions.
Nope. There are closures, not simple functions.
And FWIW, what do you think methods are in Python ? Yes, functions,
wrapped in a special descriptor.
>
>>So there's no reason one shouldn't override (or add) a method
>>on a per-object basis. As a matter of fact, it's perfectly legal (and
>>can be very convenient) to do so in Python.
>
> I never saw the term "method" used for anything except for what it means for
> classes,
Help on class instancemethod in module __builtin__:
class instancemethod(object)
| instancemethod(function, instance, class)
|
| Create an instance method object.
> and moreover, the class model, even if it's just an implementation,
> it's the one chosen by python.
There's a superficial similarity with "mainstream" static OOPLs like
Java/C++ etc. But Python's classes, and their relation to instances, are
as dynamic as can be, and really very different from what's in most books.
> For the common understanding of the model, IMHO, classes bind methods,
> instances bind functions.
???
In Python, a class is nothing more than an object that:
1/ act as an object factory
2/ serves as delegatee for instances.
FWIW, the proper constructor (__new__, not __init__) is free to return
instances of any other class (as long as the initializer signature is
compatible).
--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in 'onurb at xiludom.gro'.split('@')])"
More information about the Python-list
mailing list