Alan Gauld wrote:
"Jim Byrnes" <jf_byr...@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 implementation.

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)
<snip>

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.

Regards,  Jim
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to