base classes

Skip Montanaro skip at pobox.com
Wed Aug 22 09:22:54 EDT 2001


    pete> One question about classes. I have two classes, both have
    pete> attribute called 'a'

    pete> The question is: cannot 2 base classes have the same attributes?
    pete> What is workaround?

If your intention is that the two should be distinct, try hiding the names
by prepending two underscores to those names:

    class a1:
        def __init__( self ):
            self.__a = 1

    class a2:
        def __init__( self ):
            self.__a = 2

    class aa( a1, a2 ):
        def __init__( self ):
            a1.__init__( self )
            a2.__init__( self )

>>> AA = aa()
>>> print AA.__dict__
{'_a2__a': 2, '_a1__a': 1}

Each instance maintains all its attributes in a single dict, so without some
sort of name mangling you'll get collisions such as you observed.  Python
does work like C++ where you (more-or-less) concatenate base class structs
to build the data structure used by subclass instances.

-- 
Skip Montanaro (skip at pobox.com)
http://www.mojam.com/
http://www.musi-cal.com/




More information about the Python-list mailing list