[Tutor] calling a method directly

Cameron Simpson cs at zip.com.au
Wed Apr 22 01:59:51 CEST 2015


On 21Apr2015 09:03, alan.gauld at btinternet.com <alan.gauld at btinternet.com> wrote:
>On 21/04/15 05:19, Jim Mooney wrote:
>>Is there any difference between these two since they give the same result,
>>and when is the second preferred?
>>
>>>>>x = 'ABE'
>>>>>x.lower()
>>'abe'
>>>>>str.lower(x)
>>'abe'
>
>They are essentially the same method being accessed in two
>different ways.
>The first via the instance,
>the second via the class.

Though only because 'x' is directly a str. Not some other class. In Jim's 
example we _know_ 'x' is a str. In general one is less sure, and often one 
hopes not to care!

>It's a  bit like when you call a superclass method in OOP:
>>>> class C:
>...   def f(s): print 'in C'
>...
>>>> class D(C):
>...   def f(s):
>...     C.f(s)
>...     print 'and D'
>...   def g(s): print 'only D'
>...
>
>In the first line of D.f() you invoke C's foo method
>by referring to C and passing the local self as the object.

Worth pointing out that this is almost always the only time you cant to call 
via the class directly. And that it is actually common in subclass method 
implementations, particularly __init__, where on must often go:

  class D(C):
    def __init__(self, blah...):
      # initialise the common "C" class related stuff
      C.__init__(self, ...)
      # intialise the specific "D" class related stuff
      ... D-specific-stuff-here ...

[...]
>There are very few cases where the class version is preferred,
>you nearly always use the instance technique.

Indeed. Not least because (a) you don't always know or even care what class an 
object is and (b) objects themselves can have callable attributes.

Cheers,
Cameron Simpson <cs at zip.com.au>

Applications Programming is for dullards who can't do Systems Programming.
        - David Rose, dave at werple.apana.org.au


More information about the Tutor mailing list