<story><title>Why Is the Migration to Python 3 Taking So Long?</title><url>https://stackoverflow.blog/2019/11/14/why-is-the-migration-to-python-3-taking-so-long/</url></story><parent_chain><item><author>CoolGuySteve</author><text>I myself, speaking for my self and only my self find that, in regards to myself, the redundant self keyword, in my self&amp;#x27;s opinion, is somewhat selfish and easy for my self to accidentally omit.  Self.</text></item><item><author>chungy</author><text>Can you describe how OOP feels tacked on? One of the major changes in Python 3 is that new-style classes are the only style of classes.</text></item><item><author>erokar</author><text>Python 3 seems like a bit of a missed opportunity. Since they were introducing breaking changes in the first place, why didn&amp;#x27;t they go bigger? E.g. make the OOP seem less tacked on, immutable data structures, clean up inconsistencies in the standard library?</text></item><item><author>downerending</author><text>Because there&amp;#x27;s been not enough carrot and too much stick.&lt;p&gt;The only real killer feature of Python3 is the async programming model.  Unfortunately, the standard library version is numbingly complex.  (Curio is far easier to follow, but doesn&amp;#x27;t appear to have a future.)&lt;p&gt;On the down side, switching to Unicode strings is a major hurdle.  It mostly &amp;quot;just works&amp;quot;, but when it doesn&amp;#x27;t, it can be difficult to see what&amp;#x27;s going on.  Probably most programmers don&amp;#x27;t really understand all of the ins and outs.  And on top of that, you get weird bugs like this one, which apparently is simply never going to be fixed.&lt;p&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;pallets&amp;#x2F;click&amp;#x2F;issues&amp;#x2F;1212&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;pallets&amp;#x2F;click&amp;#x2F;issues&amp;#x2F;1212&lt;/a&gt;</text></item></parent_chain><comment><author>enragedcacti</author><text>I personally really like the self keyword after spending some time reading code in Java where `this` is optional. Having to reference self makes it more clear where data is coming from and makes navigating an unfamiliar code base much easier. I&amp;#x27;m a fan of forcing devs to acknowledge when they are accessing or manipulating mutable object state.&lt;p&gt;Separate from that, I think that would be a much bigger breaking change than you think. __setattr__ and __setattribute__ means that self.y doesn&amp;#x27;t necessarily refer to a traditional attribute so without self you could end up with either:&lt;p&gt;1. `x = y` where the expression `y` executes code&lt;p&gt;or&lt;p&gt;2. `x = y` where `x = ???` and `x = self.y` where `x = self.__setattr__(&amp;#x27;y&amp;#x27;)`.&lt;p&gt;That said, I do think the language could use something to reduce the size of __init__() since&lt;p&gt;self.arg1 = arg1&lt;p&gt;self.arg2 = arg2&lt;p&gt;self.arg3 = arg3&lt;p&gt;...&lt;p&gt;can get pretty verbose</text></comment>
<story><title>Why Is the Migration to Python 3 Taking So Long?</title><url>https://stackoverflow.blog/2019/11/14/why-is-the-migration-to-python-3-taking-so-long/</url></story><parent_chain><item><author>CoolGuySteve</author><text>I myself, speaking for my self and only my self find that, in regards to myself, the redundant self keyword, in my self&amp;#x27;s opinion, is somewhat selfish and easy for my self to accidentally omit.  Self.</text></item><item><author>chungy</author><text>Can you describe how OOP feels tacked on? One of the major changes in Python 3 is that new-style classes are the only style of classes.</text></item><item><author>erokar</author><text>Python 3 seems like a bit of a missed opportunity. Since they were introducing breaking changes in the first place, why didn&amp;#x27;t they go bigger? E.g. make the OOP seem less tacked on, immutable data structures, clean up inconsistencies in the standard library?</text></item><item><author>downerending</author><text>Because there&amp;#x27;s been not enough carrot and too much stick.&lt;p&gt;The only real killer feature of Python3 is the async programming model.  Unfortunately, the standard library version is numbingly complex.  (Curio is far easier to follow, but doesn&amp;#x27;t appear to have a future.)&lt;p&gt;On the down side, switching to Unicode strings is a major hurdle.  It mostly &amp;quot;just works&amp;quot;, but when it doesn&amp;#x27;t, it can be difficult to see what&amp;#x27;s going on.  Probably most programmers don&amp;#x27;t really understand all of the ins and outs.  And on top of that, you get weird bugs like this one, which apparently is simply never going to be fixed.&lt;p&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;pallets&amp;#x2F;click&amp;#x2F;issues&amp;#x2F;1212&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;pallets&amp;#x2F;click&amp;#x2F;issues&amp;#x2F;1212&lt;/a&gt;</text></item></parent_chain><comment><author>btown</author><text>Self lets you do really cool things though. For instance, you can monkey-patch with `def override_method(arg_that_will_get_self, *args): pass; Class.method = override_method` after Class is defined. Python lets you have all the dynamism of Ruby without letting you go too crazy with DSLs - which is the perfect balance IMO.</text></comment>