This is a minimal example of a much more complex thing I'm trying to
do. I'm trying to hijack a function and inspect the args passed to it
by another function.
The reason the 'Tester' object has no attribute 'arg1' is because
"self" still refers to the object made for testA.
I hope someone else can spot the low-level reason...
...but why aren't you using http://pypi.python.org/pypi/mock/ ? Look
up its patch_object facility...
Quick answer: change faketest.py as follows:
#--------------------------------------------------
# faketest.py
#--------------------------------------------------
#from importme import render
import importme
def run(somearg):
return importme.render(somearg)
=========
A long answer, with explanation, will cost you twice as much ;-)
(but will have to wait)
André
Or you figure it out yourself staring at
>>> import os
>>> from os import rename
>>> os.rename = 42
>>> rename
<built-in function rename>
>>> os.rename
42
from module import name
binds the object referred to by module.name to the name variable in the
current module. You can think of it as a shortcut for
import module
name = module.name
del module
When you later rebind
import module
module.name = something_else
the reference in the current module isn't magically updated to point to
something_else.
Peter
Indeed, I love mock, although I prefer testfixture replace decorator
and/or context manager for installing and removing them:
http://packages.python.org/testfixtures/mocking.html
cheers,
Chris
--
Simplistix - Content Management, Batch Processing & Python Consulting
- http://www.simplistix.co.uk