Which part of the loop is it going through in this class frame?
Ben Finney
ben+python at benfinney.id.au
Wed Mar 7 18:18:08 EST 2018
C W <tmrsg11 at gmail.com> writes:
> I am new to OOP.
Welcome, and congratulations on learning Python.
> I'm a bit confused about the following code.
>
> def print_time(self):
Begins a function definition. The function will receive one argument
(the class instance), and bind the name ‘self’ to that.
> time = '6:30'
Creates a new text string, and binds the name ‘time’ to that.
Nothing else ever uses that local name.
> print(self.time)
Gets the value of ‘self.time’ – which means, get the object referred to
by ‘self’, look up an attribute named ‘time’, and get the object that
name is bound to – then pass that object as an argument to call ‘print’.
The ‘print’ function will get a text representation of the object, and
emit that text to output.
Nothing else happens in the function; so, the local name ‘time’ falls
out of scope and is never used.
The function then returns ‘None’.
> clock = Clock('5:30')
> clock.print_time()
> 5:30
>
> I set time to 6:30
No, you bound *a* name ‘time’ locally inside the ‘print_time’ function;
but you never used that afterward.
The local name ‘time’ is a different reference from the ‘self.time’
reference.
> How does line-by-line execution run inside a frame? How does __init__
> work?
After Python creates an instance of a class (using that class's
‘__new__’ method as the constructor), it then tells the instance to
initialise itself; it calls the object's ‘__init__’ method as the
initialiser.
So the initialiser, named ‘__init__’, is called once the object exists,
but before the caller gets to use that object. The initialiser's job is
to initialise the state of the object; your class does this by setting
the per-instance ‘time’ attribute.
So, by the time your statement binds the name ‘clock’ to the new Clock
instance, that instance already has an attribute ‘clock.time’ with the
value ‘'5:30'’.
That attribute is then available when something else uses that object;
for example, the ‘print_time’ method accesses that attribute and prints
it out.
--
\ “As the most participatory form of mass speech yet developed, |
`\ the Internet deserves the highest protection from governmental |
_o__) intrusion.” —U.S. District Court Judge Dalzell |
Ben Finney
More information about the Python-list
mailing list