Re: Python, Possibly OO, Terminology Question

  • From: David Tseng <davidct1209@xxxxxxxxx>
  • To: programmingblind@xxxxxxxxxxxxx
  • Date: Fri, 29 Jul 2011 13:59:46 -0700

Call it whatever you want...as long as you have a firm grasp of the
underlying concepts relating to OOP or functional programming, you'll
be just fine.

Tell me what the following is:
function () {
  function SimpleArith() {
    'Add': function(a,b) { return a + b; },
    'Sub': function(a,b) { return a - b; },
    'PI':3.14,
  };
};

function Compute(a,b) {...}

They're all called functions...namespaces, classes, methods, functions...

On 7/29/11, Ken Perry <whistler@xxxxxxxxxxxxx> wrote:
> I will say one more thing.  If you search for this "difference between
> function and method"  you will find lots of people that will argue this
> point over and over.  In fact you will find most of them that say it don't
> matter but I want to drop some code right here.  There is one language that
> definitely is both functional and object oriented and that is c++ so look at
> this code
>
> Class  myClass{
> Int b=0;
> Void aThing(int a){b=a};
> }
>
> Int b=0;
> Void aThing(int a){
> B=a;
> }
>
> Now to use the aThing in the first you must instantiate the class and use it
> from the class to use the second aThing you don't have to.  One is called a
> function to distinguish it from the other.  It's still a function but it's a
> method because it's part of a classs.  So go ahead call it whatever you like
> but the fact is there is a major difference.  Not only is there a difference
> but it matters in languages when you have both functional and objects in the
> same language because the top two could be in the same program in the same
> c++ file and they are different.
>
> ken
>
>
> -----Original Message-----
> From: programmingblind-bounce@xxxxxxxxxxxxx
> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Johannes Grib
> Sent: Friday, July 29, 2011 6:45 AM
> To: programmingblind@xxxxxxxxxxxxx
> Subject: RE: Python, Possibly OO, Terminology Question
>
> Hi Ken PerryPerry,
> Perhaps you might want to cite references please as documentation state the
> following:
>
>
> The class contains the methods. A method is a function or module that is
> owned by the class. Depending on the programming language you're using,
> method, function, module, subroutine may all be used interchangeably.
>
> This supports Kerneels's "wrong" answer.
>
> Kindest
> Johannes
>
>
>
> -----Original Message-----
> From: programmingblind-bounce@xxxxxxxxxxxxx
> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Ken Perry
> Sent: Friday, July 29, 2011 12:29
> To: programmingblind@xxxxxxxxxxxxx
> Subject: RE: Python, Possibly OO, Terminology Question
>
>
> Well if you want me to I will
> You said,
> "> in fact want to distinguish between them you could use "method" for
>> something that doesn't return anything (a void function) and use
>> "function" when something is returned, but it really doesn't matter
>> much since it's just documentation particulars."
>
> That was wrong that is the descriptions between a procedure and an function
> like I said in my email.  Also there is a difference between function and
> method it's not just a documentation thing another wrong statement. For
> example it would be the same thing saying a member is the same thing as a
> class.  While a member of a class is a  variable it is a variable attached
> to a class as a method is a function attached to a class.
>
>
> -----Original Message-----
> From: programmingblind-bounce@xxxxxxxxxxxxx
> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Kerneels Roos
> Sent: Friday, July 29, 2011 3:34 AM
> To: programmingblind@xxxxxxxxxxxxx
> Subject: Re: Python, Possibly OO, Terminology Question
>
> I did say "please correct me if I'm wrong" but I was referring to the
> Python stuff really. So where is my answer wrong please? I don't think
> my answer was a wrong or right kind of answer actually -- it's about
> preference and style (excluding the Python specifics).
>
> Also made it quite clear that it doesn't really matter if you use the
> term "method" or "function" since they are used interchangeably and mean
> the same thing, or more importantly, you can't draw any serious
> conclusion if someone uses one or the other right?
>
> Simply saying "the previous answer is wrong" is too vague for me at
> leastThe statement about procedures, that we used to call functions that
> didn't return anything "procedures" -- yeah, I can remember that from
> Pascal also. Wasn't it the case that if you used the keyword "Procedure"
> you couldn't return anything, while when you used "Function" you were
> forced to return something?
> Thanks for pointing that out.
>
> Maybe it's one of those things there is no true consensus about? Would
> any "real" professor venture a comment here?
>
> Regards
>
> On 7/28/2011 2:19 PM, Ken Perry wrote:
>>
>> The previous answer was wrong.  We used to call functions that return
>> nothing a procedure but that is in languages like pascal but the following
>> is the real answer for what is a function verses method.
>>
>> A function is a piece of code that is called by name. It can be passed
> data
>> to operate on (ie. the parameters) and can optionally return data (the
>> return value).
>>
>> All data that is passed to a function is explicitly passed.
>>
>> A method is a piece of code that is called by name that is associated with
>> an object. In most respects it is identical to a function except for two
> key
>> differences.
>>
>>
>> -----Original Message-----
>> From: programmingblind-bounce@xxxxxxxxxxxxx
>> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Homme, James
>> Sent: Thursday, July 28, 2011 6:59 AM
>> To: programmingblind@xxxxxxxxxxxxx
>> Subject: RE: Python, Possibly OO, Terminology Question
>>
>> Hi All,
>> Thanks for trying to answer. I'll just keep coding and eventually I'll
>> either understand or not.
>>
>> Jim
>>
>> -----Original Message-----
>> From: programmingblind-bounce@xxxxxxxxxxxxx
>> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Kerneels Roos
>> Sent: Thursday, July 28, 2011 3:48 AM
>> To: programmingblind@xxxxxxxxxxxxx
>> Subject: Re: Python, Possibly OO, Terminology Question
>>
>> Jim, and otheres, I agree that "method" and "function" are used
>> interchangeably and mean the same thing usually, but I think if you do
>> in fact want to distiguish between them you could use "method" for
>> something that doesn't return anything (a void function) and use
>> "function" when something is returned, but it really doesn't matter much
>> since it's just documentation particulars.
>>
>> In OO terminology people seem to prefer method over function (in my
>> experience).
>>
>> What is more important is to understand the difference between class and
>> instance methods, which, coming from Java such as yourself is simple to
>> grasp. In computer science it helps to distinguish terminology from
>> implementation particulars since languages can and do use varied terms
>> for intrinsically the same thing. Some times the language uses the right
>> terminology, or the most widely accepted terminology, but ti's not a
> given.
>>
>> Now, to get back to Python, it seems there are three types of methods
>> (and please correct me here if I'm wrong):
>>
>> @staticmethod
>> def some_static_method (param1, param2):
>>       # do something not involving an instance of the class this method
>> is in, except other static items perhaps
>>
>> So this looks like the class method (OO terminology) which you get in
>> Java by adding the "static" method attribute to your method is it not?
>>
>> @classmethod
>> def some_class_method (cls):
>>       # ?? how is this different to @staticmethod ??
>>
>> Please explain the above.
>>
>> def some_instance_method (self, param1, param2):
>>       # can use self. here to reference the instance of the class
>>
>>
>> This is the normal method you get with Java without adding "static" to
>> the method signiture, so a standard instance method in Java would be the
>> equivalent of this?
>>
>>
>> Regards
>>
>>
>>
>> On 7/27/2011 11:42 PM, David Tseng wrote:
>>> For the purists out there, classes, functions, methods, procedures,
>>> etc are all sort of related.  You can think of a class as a function
>>> in python with some setup/teardown facilities, a closure, and a symbol
>>> table mapping it's instance variables/functions.  I don't think any
>>> language shows this better than javascript, but python comes pretty
>>> close.
>>>
>>> But, I think Jamal's right Jim, you should just dive in and see how
>>> things behave in practice and stop letting me and others confuse you
>>> :).
>>>
>>> On 7/27/11, Q<q@xxxxxxxxxxxxxxxxxx>   wrote:
>>>> Okay. First, everything is an object as you mentioned. This is
>>>> somewhat-important.
>>>> Now, functions vs. methods.
>>>> Generally in Python function means standalone callable. When I say
>>>> callable, I'm referring to an object which has a __call__ method.  So
>>>> when it comes down to it, functions are simply objects that define
>>>> __call__. But of course, we generally don't create these function
>>>> objects manually. That's just what happens when the interpreter reads in
>>>> a def block.
>>>> So, a function is a regular callable that does not take an instance as
>>>> its first argument.
>>>> def test():
>>>>     print "hello, world!"
>>>>
>>>> While you could attach these types of functions to a class:
>>>> class Tester(object):
>>>>     pass
>>>>
>>>> Tester.test = test
>>>>
>>>> note what happens when you instantiate that class and try to use them:
>>>> t=Tester()
>>>> t.test()
>>>> TypeError: test() takes no arguments (1 given)
>>>> Because Python tries to pass the class instance in as the first argument
>>>> to that function, and it takes none.
>>>> Now, there's absolutely no reason you couldn't do something like:
>>>> def other_test(self):
>>>>     print "Hi there!"
>>>>
>>>> and attach other_test to Tester.
>>>> And this would actually work just fine. It wouldn't be a true method
>>>> object, which has a couple of other attributes on it (try dir on a
>>>> function object and a method object for comparison)
>>>> Now, you mentioned static methods. How we create these is with the
>>>> staticmethod decorator.
>>>> Observe:
>>>>
>>>> class SomeClassWithStaticMethods(object):
>>>>
>>>>     @staticmethod
>>>>     def something_inside_the_class_namespace():
>>>>      return "I was called!"
>>>>
>>>> You can call this static method on any class object or instance. So you
>>>> could go
>>>>
>>>> SomeClassWithStaticMethods.something_inside_the_class_namespace()
>>>> or
>>>> c = SomeClassWithStaticMethods()
>>>> c.something_inside_the_class_namespace()
>>>>
>>>> but this is rarely-needed, generally better is putting a regular
>>>> function inside the class's module. This would only be required if you
>>>> explicitly want to have the function inside the class namespace, I.E. a
>>>> module with several unrelated classes.
>>>> Then, we have class methods, marked with the @classmethod decorator.
>>>> These are extremely-useful. They operate on class objects instead of
>>>> instance objects.
>>>>
>>>> class Something(object):
>>>>
>>>>     @classmethod
>>>>     def do_funky_things_to_the_class(cls):
>>>>      #You could do all kinds of hackery in here on the class object
> before
>>>> its already instantiated or whatever. cls contains the class object, and
>>>> it's conventional to use cls in this case where self is for instance
>>>> methods.
>>>>      cls.some_attribute = 1 #all instances of this class will have
>>>> some_attribute set to 1 if you call this
>>>>
>>>> I hope this untangles things a little. If you don't understand anything
>>>> feel free to ask, but do do a lot of exploration with dir. also check
>>>> out the inspect module to let you poke around at the internals and see
>>>> what's going on a bit under the covers.
>>>> And if I'm mistaken about anything here, someone on list please-do
>>>> correct me as this is all stuff I've derived from usage.
>>>>
>>>>         Q
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On 7/27/2011 4:07 PM, Jamal Mazrui wrote:
>>>>> Yes, I think a function at the module level in Python is like a static
>>>>> method of that module.  The module, moreover, is like a singleton
>> object.
>>>>> Although these nuances can be interesting to discuss, let me encourage
>>>>> folks not to get hung up on terminology, thinking that one cannot code
>>>>> productively until certain theory or terminology is mastered.  I say
>>>>> try to understand as much theory as one can at the time, but then set
>>>>> aside a solid grasp of some aspects for now if they seems elusive.
>>>>>
>>>>> I think that learning is usually best achieved through an iterative
>>>>> process that involves both learning and applying ideas.  If one
>>>>> postpones actual application, there is only so far that one's
>>>>> understanding can go.  On the other hand, after experiencing the
>>>>> results of applied understanding, one can try to learn more, apply it
>>>>> in code, debug, regroup, etc.
>>>>>
>>>>> Jamal
>>>>>
>>>>> On 7/27/2011 3:45 PM, Homme, James wrote:
>>>>>> Hi,
>>>>>> Forgot to copy the list. This sounds like static methods in other
>>>>>> languages. Is that anywhere in the universe?
>>>>>>
>>>>>> Jim
>>>>>>
>>>>>> -----Original Message-----
>>>>>> From: David Tseng [mailto:davidct1209@xxxxxxxxx]
>>>>>> Sent: Wednesday, July 27, 2011 3:40 PM
>>>>>> To: programmingblind@xxxxxxxxxxxxx
>>>>>> Cc: Homme, James
>>>>>> Subject: Re: Python, Possibly OO, Terminology Question
>>>>>>
>>>>>> With respect to python's innate "object orientedness" where
>>>>>> everything's an object, you can think of functions and methods as
>>>>>> binding or associated with other objects.  A function or method that's
>>>>>> "associated" with a class object, takes the class object as its first
>>>>>> parameter as you stated.  However, you can just as easily bind a
>>>>>> function or method to a class without that first "self" parameter.
>>>>>> The distinction lies in what the function or method is bound to.  In
>>>>>> the former, the function/method binds to an instance of that class
>>>>>> while the latter binds to the class itself.
>>>>>>
>>>>>> For example,
>>>>>> class foo:
>>>>>>      def instance(self):
>>>>>>        pass
>>>>>>
>>>>>>      def non_instance():
>>>>>>        pass
>>>>>>
>>>>>> I'd encourage you to not take any of our words for it and try it out
>>>>>> yourself.  Try typing the follwing into an interpreter.
>>>>>>>>> foo.non_instance
>>>>>>>>> foo
>>>>>>>>> foo.instance
>>>>>>>>> f = foo()
>>>>>>>>> f.non_instance
>>>>>>>>> f.instance
>>>>>>
>>>>>> On 7/27/11, Jamal Mazrui<empower@xxxxxxxxx>    wrote:
>>>>>>> I think the terms function, method, procedure, subroutine, or code
>>>>>>> block
>>>>>>> are generally synonymous.  They refer to a programming construct that
>>>>>>> receives 0 or more parameters, executes code with those parameters as
>>>>>>> data, and then returns 0 or more result values.
>>>>>>>
>>>>>>> A particular term may be used to emphasize an aspect of the context
>>>>>>> under discussion.  For example, a method implies being an aspect of
> an
>>>>>>> object.  A subroutine implies that there is no meaningful return
>> value.
>>>>>>>      A code block implies an in-line definition with access to
>>>>>>> surrounding
>>>>>>> variables.
>>>>>>>
>>>>>>> In general, however, I think there are not fine distinctions among
>>>>>>> these
>>>>>>> terms.
>>>>>>>
>>>>>>> Jamal
>>>>>>>
>>>>>>> On 7/27/2011 11:14 AM, Homme, James wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> I'm right at the point where I'm concerned about learning this the
>>>>>>>> wrong
>>>>>>>> way, so I'm asking now before it's cemented into my head. Is it
>>>>>>>> appropriate to use the term function and the term method
>>>>>>>> interchangeably? If so, why? If not, why not? I realize that in
>>>>>>>> Python,
>>>>>>>> when you have methods in the definition of a class, they always have
>>>>>>>> self as the first argument, so that helps you realize that you are
>>>>>>>> looking at a method. I also know that if you make a program that
>>>>>>>> has no
>>>>>>>> classes in it, that you can use functions, and they don't look like
>>>>>>>> they
>>>>>>>> are attached to a class, but one of the books I was looking at says
>>>>>>>> that
>>>>>>>> everything in Python is an object, even if the code doesn't look
> like
>>>>>>>> that, but I'm trying to avoid dragging that into this discussion to
>>>>>>>> possibly artificially keep concepts separate in order to learn them.
>>>>>>>>
>>>>>>>> Thanks.
>>>>>>>>
>>>>>>>> Jim
>>>>>>>>
>>>>>>>> Jim Homme,
>>>>>>>>
>>>>>>>> Usability Services,
>>>>>>>>
>>>>>>>> Phone: 412-544-1810.
>>>>>>>>
>>>>>>>>
>>>>>>>> This e-mail and any attachments to it are confidential and are
>>>>>>>> intended
>>>>>>>> solely for use of the individual or entity to whom they are
>> addressed.
>>>>>>>> If you have received this e-mail in error, please notify the sender
>>>>>>>> immediately and then delete it. If you are not the intended
>> recipient,
>>>>>>>> you must not keep, use, disclose, copy or distribute this e-mail
>>>>>>>> without
>>>>>>>> the author's prior permission. The views expressed in this e-mail
>>>>>>>> message do not necessarily represent the views of Highmark Inc., its
>>>>>>>> subsidiaries, or affiliates.
>>>>>>> __________
>>>>>>> View the list's information and change your settings at
>>>>>>> //www.freelists.org/list/programmingblind
>>>>>>>
>>>>>>>
>>>>>> __________
>>>>>> View the list's information and change your settings at
>>>>>> //www.freelists.org/list/programmingblind
>>>>>>
>>>>>>
>>>>> __________
>>>>> View the list's information and change your settings at
>>>>> //www.freelists.org/list/programmingblind
>>>>>
>>>> __________
>>>> View the list's information and change your settings at
>>>> //www.freelists.org/list/programmingblind
>>>>
>>>>
>>> __________
>>> View the list's information and change your settings at
>>> //www.freelists.org/list/programmingblind
>>>
>
> --
> Kerneels Roos
> Cell: +27 (0)82 309 1998
> Skype: cornelis.roos
>
> __________
> View the list's information and change your settings at
> //www.freelists.org/list/programmingblind
>
> __________
> View the list's information and change your settings at
> //www.freelists.org/list/programmingblind
>
> __________
> View the list's information and change your settings at
> //www.freelists.org/list/programmingblind
>
> __________
> View the list's information and change your settings at
> //www.freelists.org/list/programmingblind
>
>
__________
View the list's information and change your settings at 
//www.freelists.org/list/programmingblind

Other related posts: