I decided to try replying through the HyperKitty archived interface, where I’ve 
been examining the cosmetics of [our 
thread](https://mail.python.org/archives/list/edu-sig@python.org/thread/H6KKJR57V7G4CIPDPJ7FUCXWDHMRUYUT/
 
<https://mail.python.org/archives/list/edu-sig@python.org/thread/H6KKJR57V7G4CIPDPJ7FUCXWDHMRUYUT/>)
 to date with a critical eye.  

Also, I see I said “construct manager” a few times when I was meaning “context 
manager” — oh well.

Hyperkitty pops me into an Apple mail client I never use.  Some default Apple 
setting somewhere I suppose I could dig up.  Lets see if this sends or will I 
end up cutting and pasting to Gmail in Chrome.

Yes Wes, you’re pretty close on your educated guess/memory re that 
semi-esoteric species of class (the context manager), wherein ```__enter__``` 
is what actually returns the object of the optional “as” as in:

with DB(“users”) as db:  # <— optional object returned by ```__enter__``` which 
takes no args
    indented block
    ```__exit__``` triggered on exit, has info in args re any exceptions, I use 
*oops to gather up the 3-tuple.
outdented (db stays available but __exit__ will have likely closed the 
connection, e.g. hung up the phone on the database)

The arguments to class DB() go to the optional ```__init__``` as always, 
however ```__enter__``` gets to return the “db” (above) which then becomes 
available to the indented block (suite as Holden calls it) as a potentially 
useful object.  Most typically ```__enter__``` simply returns the self (the 
instance of the context manager class itself). However in principle it’s free 
to return any object it likes, similar to ```__iter__``` (which should at least 
return an iterator, but only self if self is already such, per class generator 
API where ```__next__``` must also be there).

[My 
pattern](https://github.com/4dsolutions/python_camp/blob/master/ContextManager.ipynb
 <https://github.com/4dsolutions/python_camp/blob/master/ContextManager.ipynb>) 
is to load up the target object db with a lot of tools for working with the 
database at hand, much as open(filename) may be use with with to create the 
filetype object.  On ```__exit__``` the database closes.  In between, I might 
even db.zap_tables() and db.create_tables().  Sometimes my DB is very 
customized to work with a very specific database. Other times I separate the 
```__enter__``` ```__exit__``` part, could be a parent helper.  The linked 
Notebook gives more context.

Yes, completely agree on Jake Vanderplas as a go to guy for anything both 
pythonic and data scientific.  

From my campsite FAQ:
Q: Where's a good place to begin with data science?
A: Follow Jake Vanderplas <http://vanderplas.com/> and study his work.

Wes, your pull requests came in smoothly and my current plan is to exhibit this 
program as is, as an example of what [super duper fluent 
Python](https://github.com/4dsolutions/python_camp/blob/master/camper_program.py
 <https://github.com/4dsolutions/python_camp/blob/master/camper_program.py>) 
actually looks like, with unit testing and the whole business.  

I might use git to dig up an old version (say from this last Monday), showing 
how ancient drafts might still be excavated in a repo, and then roll forward 
again, to the way it is now.  That’s what git’s good for kids!

I did the pull request process online for campers to observe, and commented on 
closing the request, how smoothly it all went.

I’m hoping my practice of outlining a course in a hyperlink-rich Jupyter 
Notebook will continue to spread, not that I invented it or anything.  I’m 
telling my campers this generic Notebook technology (not just Jupyter) is what 
their high schools might well be using soon, if not already. 

I’m eager to pack in a lot of serious academic content given these ["covid 
camps”](https://flic.kr/p/2iLG2qU <https://flic.kr/p/2iLG2qU>) aren’t just 
“summer camp”.  They’re a continuation of their ordinary schooling, in a 
homeschooling context.

Kirby 

_______________________________________________
Edu-sig mailing list -- edu-sig@python.org
To unsubscribe send an email to edu-sig-le...@python.org
https://mail.python.org/mailman3/lists/edu-sig.python.org/

Reply via email to