from weakref import WeakKeyDictionary


class Drinker:
    def __init__(self):
        self.req_age = 21
        self.age = dict()
        print('init')

    def __get__(self, instance_obj, objtype):
        print(f'{instance_obj}, {objtype}, {self.age}')
        return self.age.get(instance_obj, self.req_age)

    def __set__(self, instance, new_age):
        if new_age < 21:
            msg = '{name} is too young to legally imbibe'
            raise Exception(msg.format(name=instance.name))
        self.age[instance] = new_age
        print('{name} can legally drink in the USA'.format(
            name=instance.name))

    def __delete__(self, instance):
        del self.age[instance]


class Person:
    drinker_age = Drinker()

    def __init__(self, name, age):
        self.name = name
        self.drinker_age = age


p = Person('Miguel', 30)
p1 = Person('Bob', 50)

p = Person('Niki', 13)
