del — Advanced Examples
Deletes a variable, list item, dictionary entry, or object attribute
del with descriptors
Customizing deletion with __delete__ and __delattr__.
python
class ProtectedAttribute: def __set_name__(self, owner, name): self.name = name self.private_name = f"_{name}" def __get__(self, obj, objtype=None): return getattr(obj, self.private_name, None) def __set__(self, obj, value): setattr(obj, self.private_name, value) def __delete__(self, obj): raise AttributeError(f"Cannot delete {self.name}") class User: name = ProtectedAttribute() email = ProtectedAttribute() def __init__(self, name, email): self.name = name self.email = email u = User("Alice", "alice@example.com") print(f"Name: {u.name}") try: del u.name except AttributeError as e: print(f"Protected: {e}")
Expected Output
Name: Alice Protected: Cannot delete name
Descriptors can implement __delete__ to control what happens when 'del obj.attr' is used. This enables read-only or protected attributes.
Want to try these examples interactively?
Open Advanced Playground