Override built in types... possible? or proposal.

Terry Reedy tjreedy at udel.edu
Thu May 31 14:33:36 EDT 2018


On 5/31/2018 10:49 AM, Dan Strohl via Python-list wrote:
> Is it possible to override the assignment of built in types to the shorthand representations?

By which I presume you mean literals and overt (non-comprehension) 
displays.  So you wish that Python should be even more dynamic.  (Some 
wish it were less so ;-)

The CPython parser is generated by a parser-generator program from the 
python grammar and a table of non-default functions to call when the 
parser recognizes certain grammatical productions.  For instance, 
*stringliteral* is mapped to str.  I assume that the mapping is 
currently direct, and not routed through the builtins dict.  I don't 
know what other implementations do.

To change this, I believe you would have to introduce indirect mapping 
functions.  One possibility would be C equivalents of functions like

def get_str(): return builtins['str']

Then you could change future parsing by executing
   builtins['str'] = mystr\

However, this would affect the parsing of imported modules, if and when 
they are parsed, and exec and eval calls made within imported functions. 
  This would not be good.

So I believe you would also need to introduce a module copy of a subset 
of builtins, call it '__modclass__', whose keys would be the classes 
called by the parser, and use that in the get_xyz functions.  Then I 
believe you could change parsing within a module by executing
    __modclass__['str'] = mystr

> and yes, I know I could simply not do [] and always do my_list('item1', 'item2', 'item3')

I think we should stick with this.

> This would only be scoped to the current module and would not be imported when that module was imported.

The harder part, I think, is "and not affect parsing of imported modules 
if they are not already parsed and not affect exec and eval calls in 
imported modules.


-- 
Terry Jan Reedy




More information about the Python-list mailing list