"spir" <denis.s...@free.fr> wrote

Two methods only one message. It is what polymorphism is all about.

Well, I do not want to argue. But this is not what I call polymorphism.
Not "on the same object". Polymorphism as I know it rather dispatches depending on the object (usually it's actual type).

Yes, the two methiods are in different classes.

But it is totally normal for a polymorphic method to call the code in the base class for that same method. In my experience that is more common than not doing it. It would be very suspicious to me to be overriding a method and *not* calling the base class (unless the base class was a pure abstract class - aka an interface) since that would imply that the methods were semantically different.

The kind of exception beeing the case of one method calling the other (as I related later in the same post). But it still is not is calling 2 methods with the same name on the same object. It's rather one method reusing another.

Yes, that would be self messaging which is a different thing altogether
But calling the method of a superclass from the same method is very, very common. Bjarne Stroustrup describes this practice in "The C++ Programming Language" as: ---------- quote ------- "The cleanest solution is for the derived class to use only the public members of its base class. For example

void Manager::print() const
{   Empoyee::print()  // print Employee info
    cout << level;  // print Manager specific info
};

Note that :: must be used because print has been redefined in manager. SUCH REUSE OF NAMES IS TYPICAL --------------end quote--------------
(caps mine)

Although Python is not C++ it makes no difference in this case, the principle is the same.

And Grady Booch says in his OOAD book when discussing a method defined as:

------------- quote ----------
void ElectricData::send() {
   TelemetryData::send()
   // transmit the electric data
}

Most OO languages permit the implementation of a subclass's method to invoke a method defined in some super class. As this exampler shows IT IS COMMON for the implementation of a redefined method TO INVOKE THE METHOD OF THE SAME NAME DEFINED BY A PARENT CLASS.

....<discussion of various languiage implementations of same>...

In our experience, a developer USUALLY NEEDS TO INVOKE A SUPERCLASS METHOD EITHER JUST BEFORE OR AFTER DOING SOME OTHER ACTION. In this way subclass methods play a role in AUGMENTING THE BEHAVIOUR DEFINED IN THE SUPERCLASS.
------------- end quote ----------
(caps mine)

So at least two well known OOP authorities recognise that such is common practice.

--
Alan Gauld
Author of the Learn to Program web site
http://www.alan-g.me.uk/

_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to