is python Object oriented??

Bruno Desthuilliers bruno.42.desthuilliers at websiteburo.invalid
Mon Feb 2 10:59:59 CET 2009


Michael Torrie a écrit :
> Steve Holden wrote:
>> You can think what you like, but there is a fundamental difference
>> between methods of a class and functions of a module. Until you
>> appreciate that you will likely make mistakes. Don't worry, though, we
>> all learn from our mistakes.
> 
> And this fundamental difference is?

That a method is bound to a class and (usually) an instance of this class.

> From what I can tell an instance method is an object that encapsulates
> the function object in a closure

s/closure/object/

> that makes sure it has a reference to
> "self." 

the method object is instanciated by the function object itself when it 
is looked up upon a class or instance (thanks to the descriptor 
protocol). It (the method object) stores the function, the class and (if 
bound) the instance as attributes, and it's __call__ method takes care 
of calling the function with the instance as first positional argument.

> I know that you dynamically add functions to objects creating
> methods dynamically, by using new.instancemethod or something.

Or simply by manually invoking the descriptor protocol:


def func(self):
    print "self is", self

class Foo(object):
    pass

f = Foo()
f.func = func.__get__(f, type(f))

print dir(f.func)

> 
> This seems to indicate to me that there are functions and there are
> functions.  Methods are in fact functions, just with a callable wrapper
> around them.

Methods *are* the callable wrapper around functions - so they can't be 
functions themselves. From this POV, the functions wrapped by methods 
are actually the *implementation* of the method.




More information about the Python-list mailing list