[Python-ideas] Dart-like method cascading operator in Python

Markus Unterwaditzer markus at unterwaditzer.net
Thu Nov 21 17:37:47 CET 2013


IMO this:

x = MyString \
    .replace(blah, blub) \
    .lower()

And this:

x = MyString:
    .replace(blah, blub)
    .lower()

...look way too similar and might introduce really bad bugs. So i am +1 on introducing more new syntax for this new feature.

"Perešíni Peter" <ppershing at gmail.com> wrote:
>I really like the colon to show that the indentation is going to change
>--
>it is Pythonic and consistent with the language plus helps both
>interactive
>console and parsers/editors to expect the indentation.
>
>However, I would still make cascading operator different from dot just
>to
>be more explicit (to avoid confusion of the programmers that do not
>know
>about this feature yet -- double dot will indicate that this is a new
>syntax)
>
>
>On Thu, Nov 21, 2013 at 4:00 PM, Chris Angelico <rosuav at gmail.com>
>wrote:
>
>> On Fri, Nov 22, 2013 at 1:56 AM, Masklinn <masklinn at masklinn.net>
>wrote:
>> > The primary issue with it is that the API must be crafted
>specifically
>> > for chaining: everything must be done with methods, and methods
>must
>> > return their `self`. Not only does this mean mutator methods which
>could
>> > return something else can’t, it goes against the usual Python grain
>> > (at least that of the builtins and standard library) where mutator
>> > methods generally return None.
>> >
>> > Cascading adds “chaining” to all (mutable) objects without having
>to
>> > alter them or build the API specifically to that end. Or duplicate
>> > setattr & setitem via additional methods.
>> >
>> > But yes, as noted if the situation of “infix operators line breaks”
>is
>> > not changed, it will also affect chaining (not that I think it’s a
>big
>> > deal to put a chain in parens).
>>
>> I get that. But what I'm saying is that this is needing some clear
>> definitions in terms of indentation and beginnings of lines anyway,
>so
>> it clearly cannot conflict with method chaining. It can simply use
>the
>> dot, so it'll look like normal method invocation, but with an indent
>> meaning "same as the previous" - like how a BIND file is often laid
>> out:
>>
>> @       IN      SOA    .... blah blah ....
>>         IN      NS      ns1.blah.blah
>>         IN      NS      ns2.blah.blah
>>         IN      MX      10 mail
>>
>> This would have things look pretty much the same:
>>
>> foo.bar():
>>     .quux()
>>     .asdf()
>>     .qwer()
>>
>> ChrisA
>> _______________________________________________
>> Python-ideas mailing list
>> Python-ideas at python.org
>> https://mail.python.org/mailman/listinfo/python-ideas
>>
>
>
>------------------------------------------------------------------------
>
>_______________________________________________
>Python-ideas mailing list
>Python-ideas at python.org
>https://mail.python.org/mailman/listinfo/python-ideas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20131121/e5daa1d2/attachment.html>


More information about the Python-ideas mailing list