[Edu-sig] teaching module

kirby urner kirby.urner at gmail.com
Sun Oct 16 20:37:29 EDT 2016


# -*- coding: utf-8 -*-
"""
Created on Fri Oct 14 17:45:13 2016

@author: Kirby Urner

"""

print("{:=^40}".format("< Exhibit 1: scoping controls >"))
from random import choice

def add_tricks(cls):
    """
    choice(tricks) maintains access to add_tricks namespace,
    what's known as a "closure" (like a "bottled" space)

    cls.tricks = [...] would also work
    """
    tricks = ["play dead", "roll over", "sit up"]
    def do_trick(self):
        return choice(tricks)
    cls.do_trick = do_trick
    return cls

@add_tricks
class Animal:
    """
    Decorate a class with a function, end up with a
    new second inheritable method
    """
    def __init__(self, nm):
        self.name = nm

class Mammal(Animal):
    """Lets teach an old dog some new tricks... """
    pass

# Animal = add_tricks(Animal) <-- 'no decorator' alternative

obj_1 = Animal("Rover")
print(obj_1.name, "does this trick:", obj_1.do_trick())

obj_2 = Mammal("Trixy")
print(obj_2.name, "does this trick:", obj_2.do_trick())

print("{:=^40}".format("< Exhibit 2: str() vs repr() >"))

class Airport:
    """
    Clarifying the relationship between str() & repr()
    """

    def __init__(self, three_letter_code):  # birth!
        self.code = three_letter_code

    def __str__(self):
        return "Airport w/ code: " + self.code

    def __repr__(self):
        return "Airport('{}')".format(self.code)

portland_or = Airport("PDX")
newark_nj = Airport("EWR")

print(portland_or)        # __str__
print(repr(portland_or))  # __repr__

print("{:=^40}".format("< Exhibit 3: scoping controls >"))

brand = "Cheery Deary" # who can overwrite

def outer():
    brand = "Deco Echo"
    def inner():
        # global brand
        nonlocal brand  # reference enclosing scope
        brand = "Oompa Loompa" # could be local
        print("inner:",brand)
    inner()
    print("outer:",brand)

outer()
print("Global:", brand)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/edu-sig/attachments/20161016/37fa4109/attachment.html>


More information about the Edu-sig mailing list