Does Python really follow its philosophy of "Readability counts"?
Chris Rebert
clp2 at rebertia.com
Sun Jan 11 20:26:58 EST 2009
On Sun, Jan 11, 2009 at 4:33 PM, Carl Banks <pavlovevidence at gmail.com> wrote:
> On Jan 11, 5:49 pm, Chris Rebert <c... at rebertia.com> wrote:
>> On Sun, Jan 11, 2009 at 3:15 PM, Carl Banks <pavlovevide... at gmail.com> wrote:
>> > On Jan 11, 3:31 pm, Chris Rebert <c... at rebertia.com> wrote:
>> >> On Sun, Jan 11, 2009 at 1:22 PM, Madhusudan.C.S <madhusuda... at 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
More information about the Python-list
mailing list