🐍 Python - Monkey Patching
Updated at 2018-06-10 22:52
Monkey patching is changing a class runtime. Monkey patching is common in Python. Monkey patching can make applications hard to understand and brittle if used wrong.
import random
from typing import Any, MutableSequence
class Bar:
_items: MutableSequence
def __init__(self) -> None:
self._items = [0, 10, 20]
def __len__(self) -> int:
return len(self._items)
def __getitem__(self, position) -> Any:
return self._items[position]
b = Bar()
assert b[1] == 10
# b[1] = 5 # this would crash
# random.shuffle(b) # this would crash
def set_item(self: Bar, position: int, item: int):
self._items[position] = item
Bar.__setitem__ = set_item
# and now they work.
b: MutableSequence
b[1] = 5
random.shuffle(b)
Source
- Fluent Python, Luciano Ramalho