Confused with methods

Steven Bethard steven.bethard at gmail.com
Mon Feb 7 12:37:24 EST 2005


jfj wrote:
> I think the problem is that you know python so well that you are used
> to the way things are and everything seems natural the way it is.
> For a newbie, the behaviour I mentioned seems indeed a bit inconsistent.
> "Inconsistent" not as in mathematics but as in "wow! I'd thought this
> should work like this". Like you have a perception of the language
> and then this feature changes everything. It's a different kind of
> "inconsistency" and it doesn't give python a bad name or something,
> nor does it break the mathematical laws of the universe.

Yup, this kind of discovery happens all the time.  When you ask about it 
though, you should try to be clear that you're asking a question, not 
making an assertion.  Your post said things like:

...this is not possible...
...we prove that it is indeed a function...
...Isn't that inconsistent?...

This makes you sound very certain of yourself.  If you're willing to 
acknowledge that your understanding of Python is incomplete and ask 
questions instead of making assertions, you'll get a lot fewer hostile 
responses to your posts.

For your benefit, and the benefit of others who make this same mistake, 
I'll rewrite your original post in a manner that won't seem so 
self-important and confrontational[1].

Here's your original post:

----------------------------------------------------------------------
I don't understand.
We can take a function and attach it to an object, and then call it
as an instance method as long as it has at least one argument:

[snip example assigning function to class]

However this is not possible for another instance method:

[snip example assigning instancemethod to class]

Python complains that 'foo() takes exactly 2 arguments (1 given)'.
But by calling "b.foo(1)" we prove that it is indeed a function which takes
exactly one argument.

Isn't that inconsistent?
----------------------------------------------------------------------

And here it is rewritten to sound less confrontational:

----------------------------------------------------------------------
I don't understand.
I can take a function and attach it to an object, and then call it
as an instance method as long as it has at least one argument:

[snip example assigning function to class]

But I don't know how to do the same thing when I get the function from 
an instance:

[snip example assigning instancemethod to class]

Python complains that 'foo() takes exactly 2 arguments (1 given)'.

Can someone explain this behavior to me?  How would I get a function 
from an instance and assign it to a class?
----------------------------------------------------------------------

I've left most of the terminological errors in the question since they 
were probably inevitably part of the question.  Note however, that my 
rewrite of your post makes it clear that you are asking questions, not 
making assertions.  If you don't make assertions about things you don't 
fully understand, you'll have a much easier time on this newsgroup.

Steve

[1] This was probably not the intended air, but that's how it came across.



More information about the Python-list mailing list