[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Which part of the loop is it going through in this class frame?

On Wednesday, March 7, 2018 at 1:58:33 PM UTC-8, C W wrote:
> Hello,
> I am new to OOP. 

There are (at least) two purposes for classes:

1) To group together data and functions in a meaningful way.  Functions which are defined inside a class are called methods.

2) To allow the preservation of state when you exit a method. 

>I'm a bit confused about the following code.
> class Clock(object):
>     def __init__(self, time):
>         self.time = time

Here you are binding SELF.time to the value you passed in using the name time.  The value of self.time is preserved when you leave the __init__ method, and that value is accessible again later when you call other methods in your Clock object.  The local variable called time in __init__() will disappear when you leave __init__().

>     def print_time(self):
>         time = '6:30'
>         print(self.time)
> clock = Clock('5:30')
> clock.print_time()
> 5:30
> I set time to 6:30, but it's coming out to 5:30. I guess it's because I
> passed in 5:30, so, it's replaced?

No, time and self.time are two different variables.  Your program is printing self.time, which you defined when you created your Clock object.  And honestly, that's the more intuitive behavior for an object.  Why create an object and then not use its state?

> How does line-by-line execution run inside a frame? How does __init__ work?
> I understand you must have __init__. Is it run before print_time(), 

Yes, __init__() is the first method that gets called when you create an instance of a class.  You don't name __init__() explicitly, because Python has to construct the reference to self.  You perform all of the initial setup of your object in __init__().

> if so,
> why don't I just set self.time = '6:30' instead of self.time = time?

If you don't want to pass a time to a Clock when you create one, you could hard-code self.time = "6:30" in __init__().  But again, your instincts are correct and intuitive to me.  You want a Clock object that you can set to a user-defined time, when you create it.

> Thanks!