[Python-Dev] reflections on basestring -- and other abstractbasetypes

Alex Martelli aleaxit at yahoo.com
Mon Nov 3 02:54:52 EST 2003


On Sunday 02 November 2003 11:52 pm, Raymond Hettinger wrote:
> > 1. Shouldn't class UserString.UserString inherit from basestring?
>
> The functionality of UserString has been subsumed by inheriting from
> str.  So, its main purpose now is to keep old code working which means
> that it is probably not wise to suddenly convert it from a classic class
> to a new-style class.

OK, I guess.  The implementation doesn't offer all that much extra
convenience when compared to inheriting str, anyway -- no "factoring
out" a la DictMixin, for example.  Presumably there's little demand.

> At one time, I also requested an abstract numeric inheritance hierarchy
> with real=union(int,float,long) and numbers=union(real,complex).
> However, much time has passed and the need has never risen again.

I guess I just play too much with numbers...;-).


> > multiply inherit from basestring AND also from another builtin type
> which
> > does not in turn inherit from basestring.
>
> I would rather leave this open than introduce code to prevent it. My
> sense is that blocking it would introduce complexity in coding,
> documentation, understanding, and debugging while offering near zero
> payoff.

The payoff would be just in avoiding confusion.  I don't see what
complexity there could be in making each base* abstracttype
incompatible with the others -- guess I'm missing something...?


> In the C code, the actual test is for PySequence_Check() which seems to
> do a good job of finding non-mapping objects implementing __getitem__.

Unless I'm mistaken, that's exactly operator.isSequenceType(), and:

>>> import operator, UserDict
>>> operator.isSequenceType(UserDict.UserDict())
True

...wouldn't it be NICE to let the user help code needing to disambiguate
sequences from mappings by inheriting basesequence or basemapping...?

> operator.isMappingType
   ...
> In the meantime, I would like to remove that function from the operator
> module.  It is broken.

Yes, but isn't isSequenceType pretty iffy too...?


Alex




More information about the Python-Dev mailing list