<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">When I'm not doing exotic Martian Math summer school, sharing weird Portland math no one knows if not an American literature buff (1900s New England Transcendentalism), I'm teaching night school Intro to Python, in California, or nationwide, online.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Tonight I was saying that whereas Python is named for Monty Python, I think Greek Mythology probably has a long half-life (it's not either/or anyway), so I'm into exploring Vaults of Parnassus etc., not a new idea among Pythonistas (to link to Greek myths).</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">This is to explain some of the comments.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">From tonight's summary meetup (last session, 10 of 10):</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">=====</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default"><div class="gmail_default"><font face="arial, helvetica, sans-serif">#!/usr/bin/env python3</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif"># -*- coding: utf-8 -*-</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">"""</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">Created on Thu Jul 12 16:39:32 2018</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif"><br></font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">@author: Kirby Urner</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">"""</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif"><br></font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">class I:</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    """</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    a goofy goofy I</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    </font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    normally Pythonistas say self not me, but hey,</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    it's just a placeholder.  Free country.</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    """</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    </font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    def __init__(me):</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        me.stomach = [ ] # empty (subclasses use it)</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        me.energy = 100</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        </font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    def __repr__(self):</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        return "I live at {} on Memory Lane".format(id(self))</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    </font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    def __str__(me):</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        return "Well hello, I'm a self"</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    </font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    def selfie(me):</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        "Click!"</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        return me</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    </font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    def __enter__(me):</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        """</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        context manager I am</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        """</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        return me.selfie() # same as return self</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    </font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    def __exit__(me, *oops):</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        if oops[0]:</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">            return False  # woopsy, sorry about that</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        return True</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif"><br></font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    def __del__(me):</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        print("I now have one less refcount!")</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif"><br></font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">if __name__ == "__main__":    </font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    with I() as me:</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        print(me)</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        print([me])</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">        </font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    # me sticks around even after context ends</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    </font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    other = I()</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    print(other, "too")</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    print([other])</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif"><br></font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    del me</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    del other</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    </font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">==========</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif"><br></font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif"><div class="gmail_default">#!/usr/bin/env python3</div><div class="gmail_default"># -*- coding: utf-8 -*-</div><div class="gmail_default">"""</div><div class="gmail_default">Created on Thu Jul 12 16:56:25 2018</div><div class="gmail_default"><br></div><div class="gmail_default">@author: kurner</div><div class="gmail_default">"""</div><div class="gmail_default"><br></div><div class="gmail_default">from selfcentered import I</div><div class="gmail_default"><br></div><div class="gmail_default">class Foe(I):</div><div class="gmail_default">    """</div><div class="gmail_default">    The mythical Python lived under Mt. Parnassus (Παρνασσός)</div><div class="gmail_default">    and its breath (?) gave the Oracle of Delphi her powers </div><div class="gmail_default">    of diagnosis and prognosis</div><div class="gmail_default">    </div><div class="gmail_default">    <a href="https://en.wikipedia.org/wiki/Pythia">https://en.wikipedia.org/wiki/Pythia</a></div><div class="gmail_default">    """</div><div class="gmail_default">   </div><div class="gmail_default">    def __del__(self):</div><div class="gmail_default">        # <a href="https://en.wikipedia.org/wiki/Athena_Parthenos">https://en.wikipedia.org/wiki/Athena_Parthenos</a></div><div class="gmail_default">        print("Apollo thinks I'm dead, but I escaped to Nashville")</div><div class="gmail_default">        global selfcentered</div><div class="gmail_default">        import selfcentered</div><div class="gmail_default">        selfcentered.Python = self  # hide out in another module</div><div class="gmail_default">        </div><div class="gmail_default">class Hero(I):</div><div class="gmail_default">    """</div><div class="gmail_default">    Apollo is supposed to have slain the Python under Mt. Parnassus</div><div class="gmail_default">    """</div><div class="gmail_default">    </div><div class="gmail_default">    def __init__(self):</div><div class="gmail_default">        super().__init__()</div><div class="gmail_default">        print("A hero is born!")</div><div class="gmail_default">          </div><div class="gmail_default">    def eat(self, food : str):</div><div class="gmail_default">        if not type(food) == str:</div><div class="gmail_default">            raise ValueError</div><div class="gmail_default">        self.stomach += [food]  # yum!</div><div class="gmail_default">        self.energy += 10</div><div class="gmail_default">        </div><div class="gmail_default">    def slay(self):</div><div class="gmail_default">        global Python</div><div class="gmail_default">        if self.energy:</div><div class="gmail_default">            del Python</div><div class="gmail_default">            print("Foe slain")</div><div class="gmail_default">        else:</div><div class="gmail_default">            print("I'm too weary to fight.  Feed me!")</div><div class="gmail_default">        self.__spend_energy()</div><div class="gmail_default">     </div><div class="gmail_default">    def __spend_energy(self):</div><div class="gmail_default">        if self.energy:</div><div class="gmail_default">            self.energy = (self.energy - 10 </div><div class="gmail_default">                            if self.energy >= 10 </div><div class="gmail_default">                            else 0)</div><div class="gmail_default">        if len(self.stomach):</div><div class="gmail_default">            print("Digesting {}".format(self.stomach.pop(0)))</div><div class="gmail_default">            </div><div class="gmail_default">    def seek(self):</div><div class="gmail_default">        print("seeking foe")</div><div class="gmail_default">        self.__spend_energy()</div><div class="gmail_default">        </div><div class="gmail_default">    def __repr__(self):</div><div class="gmail_default">        return "< Hero Energy:{} Stomach:{} >".\</div><div class="gmail_default">                format(self.energy, len(self.stomach))</div><div class="gmail_default">        </div><div class="gmail_default"><br></div><div class="gmail_default">if __name__ == "__main__":        </div><div class="gmail_default">    Python = Foe()  # Foe</div><div class="gmail_default">    Apollo = Hero() # Hero   </div><div class="gmail_default">    </div><div class="gmail_default">    Apollo.eat("Manly Meal")</div><div class="gmail_default">    print(Apollo.stomach)</div><div class="gmail_default">    Hero.seek(Apollo)</div><div class="gmail_default">    Apollo.seek()</div><div class="gmail_default">    print(repr(Apollo))</div><div class="gmail_default">    Apollo.eat("Rats")</div><div class="gmail_default">    Apollo.eat("Beer")</div><div class="gmail_default">    Apollo.seek()</div><div class="gmail_default">    Apollo.seek()</div><div class="gmail_default">    Apollo.seek()</div><div class="gmail_default">    Apollo.seek()</div><div class="gmail_default">    print(repr(Apollo))</div><div class="gmail_default">    Apollo.slay()</div><div class="gmail_default">    print(repr(Apollo))</div><div class="gmail_default">    Apollo._Hero__spend_energy() # remember name mangling?</div><div class="gmail_default">    print(repr(Apollo))</div><div class="gmail_default">    print("Good bye Apollo")</div><div class="gmail_default">    del Apollo</div><div><br></div></font>=======<br>OUTPUT:<br><div><br></div><div><font face="arial, helvetica, sans-serif"><div>runfile('/Users/mac/Documents/pyt-pr/Session10/heroic_story.py', wdir='/Users/mac/Documents/pyt-pr/Session10')</div><div>A hero is born!</div><div>['Manly Meal']</div><div>seeking foe</div><div>Digesting Manly Meal</div><div>seeking foe</div><div>< Hero Energy:90 Stomach:0 ></div><div>seeking foe</div><div>Digesting Rats</div><div>seeking foe</div><div>Digesting Beer</div><div>seeking foe</div><div>seeking foe</div><div>< Hero Energy:70 Stomach:0 ></div><div>Apollo thinks I'm dead, but I escaped to Nashville</div><div>Foe slain</div><div>< Hero Energy:60 Stomach:0 ></div><div>< Hero Energy:50 Stomach:0 ></div><div>Good bye Apollo</div><div>I now have one less refcount!</div><div><br></div><div>selfcentered.Python</div><div>Out[26]: I live at 4892551320 on Memory Lane</div><div><br></div><div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><br class="gmail-Apple-interchange-newline"><br></div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">"""LAB 3 UNTIL 10:10"""</div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">Out[20]: 'LAB 3 UNTIL 10:10'</div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><br></div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">class Dog:</div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">    def bark(self):</div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">        print("Bark!")</div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><br></div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><br></div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">dog = Dog()</div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><br></div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">dog.bark()</div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">Bark!</div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><br></div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">Dog.bark(dog)</div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">Bark!</div><div><br></div><div><br></div></div></font></div></div></div></div>