Multiple inheritance - How to call method_x in InheritedBaseB from method_x in InheritedBaseA?

The Music Guy musicguy at alphaios.net
Mon Sep 7 01:48:38 EDT 2009


Sorry, that last code had a typo in it:

#!/usr/bin/python

def main():
    foox = FooX()
    fooy = FooY()
    fooz = FooZ()

    foox.method_x("I", "AM", "X")
    print
    fooy.method_x("ESTOY", "Y", "!")
    print
    fooz.method_x(100, 200, 300)


class MyMixin(object):

    def method_x(self, a, b, c):
        super(MyMixin, self).method_x(a, b, c)
        print "MyMixin.method_x(%s, %s, %s, %s)" % (repr(self),
repr(a), repr(b), repr(c))

class BaseA(object):

    def method_x(self, a, b, c):
        super(BaseA, self).method_x(a, b, c)
        print "BaseA.method_x(%s, %s, %s, %s)" % (repr(self), repr(a),
repr(b), repr(c))

class BaseB(object):

    pass

class BaseC(object):

    def method_x(self, a, b, c):
        super(BaseC, self).method_x(a, b, c)
        print "BaseC.method_x(%s, %s, %s, %s)" % (repr(self), repr(a),
repr(b), repr(c))

class FooX(BaseA, MyMixin):

    def method_x(self, a, b, c):
        super(FooX, self).method_x(a, b, c)
        print "FooX.method_x(%s, %s, %s, %s)" % (repr(self), repr(a),
repr(b), repr(c))

class FooY(BaseB, MyMixin):

    pass

class FooZ(BaseC, MyMixin):

    def method_x(self, a, b, c):
        super(FooZ, self).method_x(a, b, c)
        print "FooZ.method_x(%s, %s, %s, %s)" % (repr(self), repr(a),
repr(b), repr(c))

if __name__ == '__main__':
    main()


Traceback (most recent call last):
  File "foo.py", line 54, in <module>
    main()
  File "foo.py", line 8, in main
    foox.method_x("I", "AM", "X")
  File "foo.py", line 40, in method_x
    super(FooX, self).method_x(a, b, c)
  File "foo.py", line 24, in method_x
    super(BaseA, self).method_x(a, b, c)
  File "foo.py", line 18, in method_x
    super(MyMixin, self).method_x(a, b, c)
AttributeError: 'super' object has no attribute 'method_x'



More information about the Python-list mailing list