Class Definitions
Manfred Lotz
ml_news at posteo.de
Sat Nov 14 08:59:16 EST 2020
On Sat, 14 Nov 2020 05:08:07 -0600
2QdxY4RzWzUUiLuE at potatochowder.com wrote:
> On 2020-11-14 at 10:09:32 +0100,
> Manfred Lotz <ml_news at posteo.de> wrote:
>
> > On 11 Nov 2020 19:21:57 GMT
> > ram at zedat.fu-berlin.de (Stefan Ram) wrote:
> >
> > > In my Python course I gave the assignment to define a
> > > counter class "Main" so that
> > >
> > > counter0 = Main()
> > > counter1 = Main()
> > > counter1.count(); counter1.count(); counter1.count()
> > > counter1.count(); counter1.count()
> > > print( counter0.value )
> > > print( counter1.value )
> > >
> > > would print
> > >
> > > 0
> > > 5
> > >
> > > .
> > >
> > > I expected this solution:
> > >
> > > class Main:
> > > def __init__( self ):
> > > self.value = 0
> > > def count( self ):
> > > self.value += 1
> > >
> > > but a student turned in the following solution:
> > >
> > > class Main:
> > > value = 0
> > > def count(self):
> > > self.value += 1
> > >
> > > .
> >
> > I am still a Python beginner and didn't even believe that the
> > student's solution would work. I had expected an error as the
> > instance variable self.value was not initialized.
>
> Remember: (1) x += 1 behaves like x = x + 1, and (2) bindings created
> inside a class statement but outside any method create class
> attributes.
>
> So after counter0 = Main(), Main (the class) has an attribute called
> "value" whose value is 0, and counter0.value refers to that attribute.
>
> Then counter0.count() executes self.value += 1, which behaves like
> self.value = self.value + 1. The right side of that assignment
> evaluates to 1 (the value of the class attribute plus the constant 1),
> and then the assignment statement initializes self.value to *that*
> value.
>
> There's nothing special about initializing instance attributes in
> __init__. An instance attribute can be created/initialized anywhere.
>
>
Thanks to you and Stefan.
I did not know that if an instance variable doesn't exist the same
name is searched for as a class variable.
--
Manfred
More information about the Python-list
mailing list