[pypy-dev] Alternatives to multiple inheritance

Ryan Gonzalez rymg19 at gmail.com
Fri Apr 18 00:42:28 CEST 2014


I’m writing a scripting language using RPython. I have a base class for all
my objects. Now, I have an exception object. The exception object needs to
derive from my base class in order for me to use polymorphism inside the
interpreter. However, it also needs to derive from the Exception class to
be throwable. My code looked kind of like this:

class BaseObject(object):
    pass
class MyException(BaseObject, Exception):
    ...

However, upon trying to compile the code, I got this error:

[translation:ERROR] AssertionError: multiple inheritance only
supported with _mixin_: <class 'bolt.objects.BoltException'>
[translation:ERROR] Processing block:
[translation:ERROR]  block at 122 is a <class
'rpython.flowspace.flowcontext.SpamBlock'>
[translation:ERROR]  in (bolt.main:10)parse_and_run
[translation:ERROR]  containing the following operations:
[translation:ERROR]        v0 = simple_call((type interpreter))
[translation:ERROR]  --end--

bolt.objects.BoltException is my exception class. If I remove the Exception
base, I get this:

[translation:ERROR] AssertionError
[translation:ERROR] Processing block:
[translation:ERROR]  block at 9 is a <class
'rpython.flowspace.flowcontext.SpamBlock'>
[translation:ERROR]  in (bolt.main:4)run_file
[translation:ERROR]  containing the following operations:
[translation:ERROR]        v0 = simple_call((function create_file), p_0, ('r'))
[translation:ERROR]        v1 = getattr(v0, ('read'))
[translation:ERROR]        v2 = simple_call(v1)
[translation:ERROR]        v3 = simple_call((function parse_and_run), v2)
[translation:ERROR]        v4 = getattr(v0, ('close'))
[translation:ERROR]        v5 = simple_call(v4)
[translation:ERROR]  --end--

The only thing about multiple inheritance and RPython I found was
this<https://mail.python.org/pipermail//pypy-commit/2011-November/055925.html>
.

My current idea is to have my base object derive from Exception instead of
nothing. I was wondering if there’s a better solution, however.

-- 
Ryan
If anybody ever asks me why I prefer C++ to C, my answer will be simple:
"It's becauseslejfp23(@#Q*(E*EIdc-SEGFAULT. Wait, I don't think that was
nul-terminated."
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/pypy-dev/attachments/20140417/af92bc9d/attachment.html>


More information about the pypy-dev mailing list