Start here. This is the direct spoken answer to practice first.
Overview
Explains Python name binding and patches the reference actually used by the system under test.
A patch changes one name, not every reference to the original object. I patch the name where the code under test looks it up. If orders.py did from payments import charge, then the function uses orders.charge, so patching payments.charge after import has no effect. If it did import payments and calls payments.charge, then that module attribute is the lookup point.