On Sun, Jan 11, 2009 at 4:33 PM, Carl Banks <pavlovevide...@gmail.com> wrote: > On Jan 11, 5:49 pm, Chris Rebert <c...@rebertia.com> wrote: >> On Sun, Jan 11, 2009 at 3:15 PM, Carl Banks <pavlovevide...@gmail.com> wrote: >> > On Jan 11, 3:31 pm, Chris Rebert <c...@rebertia.com> wrote: >> >> On Sun, Jan 11, 2009 at 1:22 PM, Madhusudan.C.S <madhusuda...@gmail.com> >> >> wrote: >> >> > def somemethod(self, arg1): >> >> > self.c = 20.22 >> >> > d = "some local variable" >> >> > # do something >> >> > .... >> >> > ... >> >> > def somemethod2 (self, arg2): >> >> > self.c = "Changed the variable" >> >> > # do something 2 >> >> > ... >> >> >> > In such situations, where the Instance variables come into existence >> >> > only when they are used >> >> > it is very difficult to track the flow of code. Its obviously not >> >> > possible to remember what >> >> > instance variable was defined where, when reading some substantial >> >> > amount of code and where >> >> > it was manipulated for that matter. It becomes so very frustrating >> >> > even when reading a Class's >> >> > code with just 6-8 methods and not more than 100-150 lines of code. >> >> >> That's bad coding style on the part of the code writer. >> >> Conditionally-existing instance variables are *evil*. >> >> > Do you mean conditionally-useful instance variables evil, or that >> > conditionally-useful variables are ok but it's evil for them to >> > conditionally-exist? >> >> > The former I don't agree with at all. >> >> > If it's the latter, I believe there is something to be said for >> > variables that exist when they are needed and don't when they're not. >> > However, I acknowledge that listing all the variables you intend to >> > use in __init__ is highly comforting, even if it does belie their >> > current uselessness. >> >> The latter. I never even used the word "useful", so I have no idea >> where you got that from. > > I was just asking for clarification of your rationale, of which I > imagined two possibilities ("conditional-usefulness is bad", or > "declaring attributes outside of __init__" is bad). However... > > >> To reiterate, variables which might only exist under certain >> conditions are evil, IMHO. >> This is not to say they are not useful in certain specific cases, just >> that in general there are better ways to design/structure programs to >> avoid them. > > ...the way you phrase this suggests to me that conditional-usefulness > *is* what you are really concerned with. Let me give you an example: > > class A: > def __init__(self): > pass > def something(self): > self._conditionally_existent_variable = 1 > > > ISTM that I don't need any restructuring at all to avoid conditional > existence; all I'd have to do is add > > self._conditionally_existent_variable = None > > to __init__. If you think I need to restructure this code, than you > evidently care about something more than just conditional existence.
No, this is exactly the sort of restructuring I was referring to; and nothing more. Making that one-line change would be sufficient for me. Perhaps "restructuring" was a poor choice of words... Cheers, Chris -- Follow the path of the Iguana... http://rebertia.com -- http://mail.python.org/mailman/listinfo/python-list