Deriving from builtin types with limited instances and Extending FAQ 6.6

Gerrit Holl gerrit at nl.linux.org
Sat Feb 8 21:34:15 CET 2003


Hi,

FAQ 6.6 is:

> 6.6. Why can't I derive a class from built-in types (e.g. lists or files)?
> As of Python 2.2, you can derive from built-in types. For previous versions, the answer is:
> This is caused by the relatively late addition of (user-defined) classes to the language -- the implementation framework doesn't easily allow it. See the answer to question 4.2 for a work-around. This may be fixed in the (distant) future. 

However, this is incomplete.

 >>> class A(int): pass
 ...

Great, this one works, and can be very useful.

 >>> class A(bool): pass
 ...
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: type 'bool' is not an acceptable base type

Why doesn't this one work, I wondered when I first saw it. I found an
answer: BooleanType has limited instances, as has NoneType. However:

 >>> class A(iter): pass
 ...
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: cannot create 'builtin_function_or_method' instances

This one doesn't work either. The error message seems reasonable,
becuase 'class A(map)' won't work either. However, what is exactly
the difference with 'class A(int)'? I can also try:

 >>> def f(): yield 1
 ...
 >>> class A(f().__class__): pass
 ...
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: type 'generator' is not an acceptable base type

This offers no solution.  Of course, a real-life example
is always difficult to give, but the design is unclear to me. The
same is true for deriving for FunctionType. Another thing which
doesn't seem consequent to me:

 >>> class A(int, list): pass
 ...
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: multiple bases have instance lay-out conflict

Why not consider both int and list as classes, and simply apply
the rules for multiple-inheritance, although it may have strange
consequences? The design is unclear for me, and the FAQ is very
incomplete.

May this be fixed in the (distant) future?

yours,
Gerrit.

-- 
Asperger Syndroom - een persoonlijke benadering:
	http://people.nl.linux.org/~gerrit/
Het zijn tijden om je zelf met politiek te bemoeien:
	http://www.sp.nl/





More information about the Python-list mailing list