4 ms·
> it definitely doesn’t have it in the way Lisp/Julia/Rust/etc have it. Yes, but then again, Rust, Julia, and Lisp are _high_ standards of metaprogramming. Pyt
by pritambaral 8y ago
> it definitely doesn’t have it in the way Lisp/Julia/Rust/etc have it.
Yes, but then again, Rust, Julia, and Lisp are _high_ standards of metaprogramming. Python's approach to metaprogramming, like most of its other parts, is simple and concise. For simple tasks that are repeated often, Python sometimes provides easy ways to abstract the how and show only the what. While Python does have metaclasses — which, unfortunately or otherwise, I've never needed to write — I've sometimes found myself reaching for simpler tools like decorators, magic dunder methods, even iterators and generators. And, of course, there's always the ability to generate Python AST, or have something generate it for you.
Examples:
1. the new-in-3.7 feature: dataclasses[0];
2. the library that inspired it: attrs[1];
3. the (de)serialisation library with a strikingly simple design: marshmallow[2];
4. the leaky-abstraction of SQL that makes it somewhat composable: sqlalchemy[3];
5. Google's python bindings for Protocol Buffers[4]; and, of course
6. the lisp-in-Python: Hy[5];
----
[0]: https://www.python.org/dev/peps/pep-0557/ https://www.python.org/dev/peps/pep-0557/
[1]: http://www.attrs.org/ http://www.attrs.org/
[2]: https://marshmallow.readthedocs.io/en/3.0/_modules/marshmallow/schema.html#Schema https://marshmallow.readthedocs.io/en/3.0/_modules/marshmall...
[3]: https://docs.sqlalchemy.org/en/13/orm/extensions/declarative/api.html https://docs.sqlalchemy.org/en/13/orm/extensions/declarative...
[4]: https://developers.google.com/protocol-buffers/docs/pythontutorial?csw=1#the-protocol-buffer-api https://developers.google.com/protocol-buffers/docs/pythontu...
[5]: http://docs.hylang.org/en/stable/language/internals.html http://docs.hylang.org/en/stable/language/internals.html