Data Model

Container Protocols

Container methods connect objects to indexing, membership, and item assignment.

__setitem__ gives assignment syntax to a custom container.

Source

class Scores:
    def __init__(self):
        self._scores = {}

    def __setitem__(self, name, score):
        self._scores[name] = score

scores = Scores()
scores["Ada"] = 98
print(scores._scores)

Output

{'Ada': 98}
scores[k] = v__setitem__k in scores__contains__scores[k]__getitem__
Container syntax routes to narrow protocol methods: assignment to __setitem__, membership to __contains__, lookup to __getitem__.

__contains__ answers membership tests written with in.

Source

class Scores:
    def __init__(self):
        self._scores = {"Ada": 98}

    def __contains__(self, name):
        return name in self._scores

scores = Scores()
print("Ada" in scores)

Output

True

__getitem__ connects bracket lookup to your internal storage.

Source

class Scores:
    def __init__(self):
        self._scores = {"Ada": 98}

    def __getitem__(self, name):
        return self._scores[name]

scores = Scores()
print(scores["Ada"])

Output

98

Notes

See also

Run the complete example

Example code

Expected output

True
98

Execution time appears here after you run the example.