Vincent Davis wrote:
Thank you that makes sense to me. Much more clear then the tutorial, I think
so anyway. If you are learning about classes that you kinda expect MyClass
to have counter in it. I might be nice to show that x.counter = 1 creates an
instance that would look like (is this correct?)

class MyClass:
    """A simple example class"""
    i = 12345
    counter = 1
    def f(self):
        return 'hello world'

Thanks again

Vincent Davis


On Sat, May 23, 2009 at 8:24 AM, Benjamin Kaplan
<benjamin.kap...@case.edu>wrote:

On Sat, May 23, 2009 at 9:13 AM, Vincent Davis <vinc...@vincentdavis.net>wrote:

let me add that I see that this could be right if x.counter = 1 and
counter need not have anything to do with MyClass but this could be more
clear.
Thanks
Vincent Davis
720-301-3003


On Sat, May 23, 2009 at 7:08 AM, Vincent Davis <vinc...@vincentdavis.net>wrote:

Section 9.3.3 says that given,
class MyClass:
    """A simple example class"""
    i = 12345
    def f(self):
        return 'hello world'

and x = MyClass()
then this

x.counter = 1
while x.counter < 10:
    x.counter = x.counter * 2
print(x.counter)
del x.counter

will print 16

link,
http://docs.python.org/3.0/tutorial/classes.html#a-first-look-at-classes

I am reading this section so to learn about classes but if this is right
I think I need to start over.


The code given is correct, though the description in the tutorial could be
clearer. Basically, a class in Python is represented by a dict with strings
mapping to other stuff. Internally, x.counter = 1 is just a shortcut for
x.__dict__['counter'] = 1. This appears in the code as dynamically adding
the variable "counter" to the instance of MyClass. Unlike in static
languages, an instance variable in python doesn't need to be declared inside
the class for you to use it. It also doesn't need to appear in every
instance of the class.

The last line in the code (del x.counter) removes the "counter" key from x
so that the instance variable disappears. That's how the code works "without
leaving a trace".




Thanks
Vincent Davis
720-301-3003

--
http://mail.python.org/mailman/listinfo/python-list


--
http://mail.python.org/mailman/listinfo/python-list


(You accidentally top-posted. That makes the context much harder for others to follow.)

No, the attribute 'counter' you demonstrated is an attribute of the class. To duplicate what x.counter=1 does, you have to add it to the instance. Normally, this would be done in the __init__() method, but that would put it in each instance of the class, as it's being created. But this one is only in the 'x' instance.


--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to