| Not the person you replied to, I don't hate Python, it's not my favorite but it's my most used language. Python is unprincipled in its design. It's a kitchen sink language. It has principles (PEP 20) but they explicitly eschew purity of design in favor of practicality, readability, and simplicity of implementation. Python's type system is very flexible. You may see that as a plus, to me it feels all over the place. It has classes which you can turn into half-baked nominal typing with type annotations. You can mix-and-match interface inheritance and implementation inheritance with multiple inheritance. You can do unholy things to the class system with metaclasses and the issubclass hook. I have seen it, in a half-million LOC project. It has protocols, which are duck typing, which you can turn into half-baked structural typing with type annotations. It is multi-paradigm and it's acceptable at all but not the best at any. If you want strictly OOP or functional you're better served elsewhere. You can mix-and-match type systems and paradigms in a single codebase, which can be useful, but it's up to dev discipline to not turn the codebase into a horrible mishmash. In comparison, I don't like writing Java, but I have to admit it limits the amount of damage undisciplined devs can do to a project. |