Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sentinel object and its applications?

I know in python the builtin object() returns a sentinel object. I'm curious to what it is, but mainly its applications.

like image 985
AhToyMaker Avatar asked Sep 04 '16 05:09

AhToyMaker


2 Answers

object is the base class that all other classes inherit from in python 3. There's not a whole lot you can do with a plain old object. However an object's identity could be useful. For example the iter function takes a sentinel argument that signals when to stop termination. We could supply an object() to that.

sentinel = object()

def step():
    inp = input('enter something: ')
    if inp == 'stop' or inp == 'exit' or inp == 'done':
        return sentinel
    return inp

for inp in iter(step, sentinel):
    print('you entered', inp)

This will ask for input until the user types stop, exit, or done. I'm not exactly sure when iter with a sentinel is more useful than a generator, but I guess it's interesting anyway.

I'm not sure if this answers your question. To be clear, this is just a possible application of object. Fundamentally its existence in the python language has nothing to do with it being usable as a sentinel value (to my knowledge).

like image 148
Trevor Merrifield Avatar answered Sep 19 '22 10:09

Trevor Merrifield


This is a source code example from the Python standard library for dataclasses on using sentinel values

# A sentinel object to detect if a parameter is supplied or not.  Use
# a class to give it a better repr.
class _MISSING_TYPE:
    pass
MISSING = _MISSING_TYPE()
like image 32
Aaron Lelevier Avatar answered Sep 18 '22 10:09

Aaron Lelevier