[Tutor] OOP clarification needed
jf_byrnes at comcast.net
Wed Jun 2 17:37:53 CEST 2010
Alan Gauld wrote:
> "Jim Byrnes" <jf_byrnes at comcast.net> wrote
>> Whenever I teach myself a new language I have great difficulty
>> understanding the nuts and bolts of it's OO implementation.
> Do you understand the OO concepts OK?
> Is it only the language semantics you struggle with
> or the underlying OO concepts?
I believe I understand the theory, but struggle with the actual
>> some older procedural languages I always end up becoming confused by
>> the large number of built in methods.
> C is one of the simplest procedural languages around
> and yet it comes with a huge library of functions (several
> hundred in some cases). The size of the library should be easier
> to manage using OOP than with older function/procedure based
> libraries, because the functions are not just logically grouped
> in the documentation but in the code too.
I don't know C, I was thinking more along the lines of Basic or Rexx.I
could sit down and read through a list of keywords and built in
functions and it would be compact enough that I would have a good idea
of what was available. I can't seem to do that with the OO languages,
but of course I am older now also.
>> Case in point is this code snippet from a chapter on Tkinter.
>> def viewer(imgdir, kind=Toplevel, cols=None):
>> make thumb links window for an image directory:
>> one thumb button per image; use kind=Tk to show
>> in main app window, or Frame container (pack);
>> imgfile differs per loop: must save with a default;
>> photoimage objs must be saved: erased if reclaimed;
>> win = kind()
>> win.title('Viewer: ' + imgdir)
>> thumbs = makeThumbs(imgdir)
>> What is the relationship between kind=Toplevel in the first line and
>> win=kind() further down.
> kind is a parameter ogf the function with a default value of Toplevel.
> Toplevel being a class. Recall that in Python classes are objects
> too and can be assigned to variables. This is similar to Smalltalk,
> Lisp, Objective C and Delphi(Object Pascal) but different to C++
> and Java (actually I'm not sure about Java?).
>> Isn't "kind" a variable and "kind()" a method?
> No kind() is an invocation of a callable object.
> In Python callables tend to be either functions
> or classes or methods of objects.
> In this case it is an instantiation of a class.
> In C++ or Java it would look something like:
> win = new kind();
> Because classes can be treated as objects and passed to functions
> this instantiates whatever kind of object was passed into viewer.
> As the comment says this could be the top level window Tk or
> a generic Frame container or the default Toplevel. So long as the
> new object supports all the methods that will be invoked Python
> doesn't care. This is polymorphism...
I had completely forgotten about the callable object. I saw the ()'s
and wrongly started to think of it as a method. Thanks for the explanation.
More information about the Tutor