Distinguishing attributes and methods

Florian Diesch diesch at spamfence.net
Tue Dec 11 20:09:35 EST 2007


MonkeeSage <MonkeeSage at gmail.com> wrote:

> It seems that I've got a short-circuit somewhere here. I understand
> that everything is an object and the the storage/lookup system is
> object-agnostic, and that it is only the descriptors (or "tags" as I
> called them generically) that determine how an attribute is bound,
> whether it is bound at all, whether it is even callable, and so forth.
> So, when I say that all callable attributes (or to be more precise,
> all callable attributes bound to objects other than toplevel) are
> "methods," what am I missing?
>
> You said "the difference [between a callable attribute and a method]
> is the specific implementation of the attribute's class"...but this
> almost sounds like type-by-primitive (a method is a method when it
> derives from a certain base class), or type-by-behavior (a method is a
> method when it behaves in a certain way, e.g., responds in a certain
> way to a query). Is this correct? Shouldn't it be type-by-capability/
> interface--i.e., it implements the protocol of a callable, therefore,
> formally, it is not meaningfully different from any other callable
> (quacks like a duck and all)?
>
> I guess what I'm asking is, in what way is a "method" (or "function")
> semantically different from a home-brewed callable I concoct and bind
> to an object (or toplevel)? What is the distinction that I'm missing?



--8<---------------cut here---------------start------------->8---
#!/usr/bin/env python

class Foo(object):
    
    def __init__(self):
        def func(*args):
            return str(args)
        self.a=func

    def b(*args):
       return str(args)

    @classmethod
    def c(*args):
        return str(args)



f=Foo()
print f.a(1)   # just a callble
print f.b(1)   # an instance method
print f.c(1)   # a class method
--8<---------------cut here---------------end--------------->8---



   Florian
-- 
<http://www.florian-diesch.de/>
-----------------------------------------------------------------------
**  Hi! I'm a signature virus! Copy me into your signature, please!  **
-----------------------------------------------------------------------



More information about the Python-list mailing list