File: LP6E/Chapter38/desc-person-nested.py

# Not listed in the book: nest the decorator's class

class Person:
    def __init__(self, name):
        self._name = name

    class Name:
        'name descriptor docs'

        def __get__(self, instance, owner):
            print('fetch...')
            return instance._name

        def __set__(self, instance, value):
            print('change...')
            instance._name = value

        def __delete__(self, instance):
            print('remove...')
            del instance._name

    name = Name()                       # Assign descriptor to attr

sue = Person('Sue Jones')               # sue has a managed attribute
print(sue.name)                         # Runs Name.__get__
sue.name = 'Susan Jones'                # Runs Name.__set__
print(sue.name)
del sue.name                            # Runs Name.__delete__

print('-'*20)
bob = Person('Bob Smith')               # bob inherits descriptor too
print(bob.name)
print(Person.Name.__doc__)               # <== Differs: class moved into Person



[Home page] Books Code Blog Python Author Train Find ©M.Lutz