Sure Python has many problems, but these aren't a great selection.<p>> The syntax for classical inheritance. Half of each Django app is super().__init__(<i>args, </i>*kwargs). At least you don't have to pass arguments to super anymore.<p>Yes, inheritance is hard to do well, but that's generally true. Much better to prefer composition (<a href="https://en.wikipedia.org/wiki/Composition_over_inheritance" rel="nofollow">https://en.wikipedia.org/wiki/Composition_over_inheritance</a>)<p>> Too many magic __double-underscore__ methods and properties that you have to just memorize.<p>Better to just start using <a href="http://attrs.org" rel="nofollow">http://attrs.org</a> or dataclasses so you don't have to do all the manual work. Classes without boilerplate.<p>> Too many top-level built-in functions that (a) you have to just memorize, and (b) get really ugly. You end up with stuff like list(map(...)). I haven't used so many nested parentheses since my early days in PHP. Guido's explanation makes sense in theory, but is really annoying in practice.<p>I agree, there should be a pipeline operator |> like F# has. A similar proposal has been made for JS. <a href="https://github.com/tc39/proposal-pipeline-operator" rel="nofollow">https://github.com/tc39/proposal-pipeline-operator</a><p>> Too many other weirdo bits of magic syntax, like [list comprehensions].<p>List comprehensions are good, they just take 5 minutes of getting used to.<p>> Django specifically is so full of magic words, and its documentation is so convoluted, that I've basically given up on documentation altogether and just look at the Django source code now.<p>Pyramid has a much more principled design IMHO. <a href="https://trypyramid.com/" rel="nofollow">https://trypyramid.com/</a><p>> Needing to put dict property names `{'in': 'quotes'}.<p>Or use `dict(foo=5)`. Python mappings can contain non-string keys, so `{5: 1.2, 6: 3.4}` maps ints to floats.<p>> You have to cast your data back to a list/tuple after using enumerate() and map().<p>Don't use map, use comprehensions.<p>> Different syntaxes for lists and tuples.<p>They are different objects, why would they have the same syntax?<p>> foo['bar'] returns a KeyError, so you have to do foo.get('bar')... or in some cases getattr(foo, 'bar', None), but not in others because getattr and .get are different things.<p>Python is a different language from Javascript.<p>> You can't just tack on flags to /regular_expressions/ig.<p>Yeah that's annoying.<p>> All the goofy string literals: f' ', u' ', r' ', etc.<p>That's a good thing, not a bad thing.<p>> Pipfile does not work that well.<p>Poetry works better. <a href="https://poetry.eustace.io" rel="nofollow">https://poetry.eustace.io</a>