[ 
https://issues.apache.org/jira/browse/THRIFT-242?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12662571#action_12662571
 ] 

David Reiss commented on THRIFT-242:
------------------------------------

This suggestion was sent to the dev list.  I like it.

A simple way around this is to write
{code}
    _default = object()

    def func(x=_default):
        if x is _default:
            x = DEFAULT
{code}

You can use the same _default object for all args of this type in the same
file. This is a fairly well-known approach to this problem. The only
possible downside is someone deliberately reaching into the file to pass
_default as an arg, but in that case they get what they asked for...

> Python struct constructors are clunky and error-prone
> -----------------------------------------------------
>
>                 Key: THRIFT-242
>                 URL: https://issues.apache.org/jira/browse/THRIFT-242
>             Project: Thrift
>          Issue Type: Improvement
>          Components: Compiler (Python)
>            Reporter: Jonathan Ellis
>         Attachments: init.patch, thrift-242_no_d_argument.patch
>
>
> The python constructors are clunky and unnecessarily difficult to use.  
> Instead of
> Cls(value1, value2, ...)
> you must write
> Cls({'arg1': value1, 'arg2': value2})
> (or use the dict constructor instead of literal notation).
> Additionally, having the constructor silently do nothing if a non-dict is 
> passed in (an object of the type being created would be another reasonable 
> guess) or if an argument is mis-spelled causes users unnecessary trouble 
> debugging.
> Since removing the d argument entirely would be backwards-incompatible, the 
> attached patch keeps it, but puts real keyword parameters in for 
> forwards-compatibility.  Thus, old code will work with this patch, but new 
> code can be written using keyword args that will still  work when the d 
> argument is removed in a release that allows backwards-incompatibility.  
> (Removing the d argument is desireable because otherwise positional arguments 
> can't be used.)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to