[Python-Dev] PEP 252, PEP 253 and jython issues

Samuele Pedroni Samuele Pedroni <pedroni@inf.ethz.ch>
Thu, 23 Aug 2001 23:56:42 +0200 (MET DST)


Hi.

OK, here is my major concern

Given  the following three types subclassed in Pyhon:
class A(CSpecialList): ...

class B(list): ...

class C(A,B): ...

where CSpecialList is a subtype of list written in C.

Now the old mro would be:

C A CSpecialList list object B list object

that translate to the new mro

C A CSpecialList B list object

The question is it possible for CSpecialList for the code that define
for example sq_ass_slice to use sq_slice code in a safe manner?
(AFAIK listobject does something similar) 

And how can safely CSpecialList invoke a  "super" behaviour, it is safe
for it to refer to the behaviour offered by list. In principle
given the mro e.g. a __getslice__ redefined in B should shadow
such a behaviour?

A natural way to design PEP252, and PEP253 for Jython would
be start to start from the equation:

object = org.python.core.PyObject

then it is necessary to build a class that truly correspond to the type
metatype, actually jython fakes using the metatype used for Java Classes for 
that.

It would make sense to use Java subclassing to implement 
type subclassing, at least at layout level this does not clash with
the multiple inheritance rule in best_base.

And actually is also how Jython now works: for example
PyList extends PySequence that extends PyObject.

But than there is the issue of method resolution order: from the viewpoint
of Python code we can implement anything, not that easy ...

But the at the Java level, where we construct types, the codebase uses the 
normal single inheritance of java and the codebase is full of super.foo 
invocations and of methods that cross-call each other (potentially overriden) 
versions, and this happen also for behaviour that correspond to the slots/ 
__foo__ special methods of CPython.

That's why the two questions are important?

regards.