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: 0This descriptor is meant to give each Model instance its own `x`, but it doesn't. What is the bug and how is it fixed?