Invoking a subclass's method on its superclass's instance

Christian Tanzer tanzer at swing.co.at
Tue Sep 26 08:22:08 CEST 2000


rwklee at home.com wrote:

> I thought a natural and elegant solution is to implement only the default
> behaviour in the reference model of class methods, and then implement each
> behaviour variant as a method of a subclass with the same method name as its
> superclass's.  As the test system starts, only the reference model starts up
> (in some test scenarios that is all that is needed.)  To begin a test, the
> tester will introduce his behaviour variants, and tell the test system to
> switch to them for a selected set of instances.  After the test, he tells the
> system to switch back to the reference behaviour; and then repeat for a
> different test.

I would try something like:

===============================================================================
module A.py:
-------------------------------------------------------------------------------
class Reference :
    def behavior (self) :
        # implements reference behavior

module B.py:
-------------------------------------------------------------------------------
def behavior_variant_B (self) :
    # implements some specific behavior variant

module Test_Driver.py
-------------------------------------------------------------------------------
from A import Reference
from B import behavior_variant_B

object = Reference ()
# do some tests

object.behavior = behavior_variant_B # switch to behavior variant B
# do some more tests

del object.behavior                  # switch back to reference behavior
===============================================================================

You can repeat that with as many behavior variants as necessary. There
is no need for subclasses implementing the variants.

-- 
Christian Tanzer                                         tanzer at swing.co.at
Glasauergasse 32                                       Tel: +43 1 876 62 36
A-1130 Vienna, Austria                                 Fax: +43 1 877 66 92





More information about the Python-list mailing list