default value in __init__

Duncan Booth duncan.booth at invalid.invalid
Fri Oct 10 08:57:19 EDT 2008


bearophileHUGS at lycos.com wrote:

> Bruno Desthuilliers:
>> You mean : "to people that don't bother reading the FineManual *nor*
>> searching the newsgroup / ML archives ?"
> 
> Are there ways to change how Python3 manages arguments and functions,
> to remove this antifeature of Python, avoiding this common mistake
> done by every newbie?
> I don't care if it reduces the performance of Python a little.
> 
You can't just copy the default values on every call: you would still get 
people confused by the semantics whether you did a shallow or deep copy or 
as now no copy. I don't think simply re-executing the default argument 
expression on each call works either: that would confuse at least as many 
people as the current system.

It would be possible, but extremely annoying to limit default arguments to 
being literal constants, or slightly less drastically limit them to being 
of types known to be immutable. Of course that blocks you from using any 
user defined types unless you invent some kind of scheme for declaring that 
a type is safe to use as a default argument.

Another option might just be to generate a warning the first time a program 
uses a not obviously immutable default.

I think in this situation the best solution is to expect people to learn to 
use the language, and accept that those people who don't RTFM will keep on 
asking here. Even if you could change the behaviour of default arguments we 
would still get equivalent regular questions from the people who initialise 
class attributes with lists or dictionaries.

-- 
Duncan Booth http://kupuguy.blogspot.com



More information about the Python-list mailing list