Code Quiz

Descriptor Shared-State Bug

A data descriptor stores per-instance values incorrectly, causing state to bleed across all instances.

Codepython
class Field:
    def __init__(self, default=None):
        self.default = default
        self.value = default

    def __set_name__(self, owner, name):
        self.name = name

    def __get__(self, instance, owner):
        if instance is None:
            return self
        return self.value

    def __set__(self, instance, value):
        self.value = value


class Model:
    x = Field(0)


a = Model()
b = Model()
a.x = 10
print(b.x)  # intended: 0

This descriptor is meant to give each Model instance its own `x`, but it doesn't. What is the bug and how is it fixed?