:orphan: .. _notes_lesson09: ###################################### 3/8/2022: Advanced Language Constructs ###################################### A collection of notes to go over in class, to keep things organized. **NOTES:** I'll try to have a break every hour or so -- ping me if I forget! Issues from this week --------------------- I usually find a number of sticking points, confusions, etc, when reviewing your work -- and taking your questions. This week -- not so much! congrats! So we can take this time to answer questions -- what are you still unsure of? Fire Away! And/or we can do a little live code review. Break Time! =========== 10min break: Metaprogramming =============== This week's topic is "Advanced Language Constructs". In particular, we talk about Decorators, Context Managers, and recursion. Recursion is more a technique than a language feature -- and a very powerful one. Any questions on recursion? -- you should have all seen it a bit last quarter. Decorators and Context Managers are a little different -- they both use language features: the ``with`` keyword and the ``@decoration`` syntax. And you've all been using them some already. But actually making new ones requires what's broadly known as "metaprogramming". Metaprogramming sounds really fancy -- but in its simplest form, it's pretty straightforward. But you need to know the tools available. So let's dig deeper into that now: https://uwpce-pythoncert.github.io/ProgrammingInPython/modules/MetaProgramming.html (Again from the Course One Notes) If time: let's write a class decorator to make it easy to save dataclasses into Mongo: ``Examples/lesson09/class_decorator`` Break Time! =========== 10min break This week's assignment: let's take a look. One of the key parts is creating a context manager to manage the database connection -- we saw this a couple weeks ago in Luis' example. But before you can do that -- you need to think about how the database connection is managed -- in many of the examples, and in many of your solutions (and ours) -- the database is created at the top of a module. So it gets started up right at module import -- making it very hard to control how it happens. So let's look at that first. Example for Mongo in: ``Examples/lesson09/mdb.py``