instantiate new objects
Michael Spencer
mahs at telcopartners.com
Thu Mar 10 17:11:40 EST 2005
Felix Steffenhagen wrote:
[snip]
> In:
> http://www.informatik.uni-freiburg.de/~steffenh/bayes.py
> [bayes.test gives different results each time it is called]
Without looking in the slightest at what you are implementing or how, this
implies that state is maintained between calls to test
The question is where/how is the state maintained?
1) global module variables? - you don't have any
2) attributes of global objects?
I used:
>>> def attrs(obj):
... return dict((name,getattr(obj,name)) for name in dir(obj) if not
callable(getattr(obj, name)) and name not in ("__doc__","__module__"))
to verify that the classes are not gaining (non-callable) attributes
3) as mutable default parameters?
See:
line 135: def __init__(self,V,E,p=[]):
line 150: def generate_cpd(self,node, rest, values={}):
line 360: def computeJPD(self, rest, values={}):
I guess one (or more) of these is the culprit
Before running:
Python 2.4 (#60, Nov 30 2004, 11:49:19) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> bayesNet.generate_cpd.func_defaults
({},)
>>> bayesNet.__init__.func_defaults
([],)
>>> bayesNet.computeJPD.func_defaults
({},)
>>> test()
V = {'a': [0, 1], 'b': [0, 1]}
[snip results]
After test:
>>> bayesNet.generate_cpd.func_defaults
({'a': 1, 'b': 1},)
>>> bayesNet.__init__.func_defaults
([],)
>>> bayesNet.computeJPD.func_defaults
({'a': 1, 'b': 1},)
>>>
HTH
Michael
More information about the Python-list
mailing list