Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Python (http://www.velocityreviews.com/forums/f43-python.html)
-   -   defining classes (http://www.velocityreviews.com/forums/t348729-defining-classes.html)

LeRoy Lee 09-02-2005 08:09 PM

defining classes
 
I have been searching for the answer to this as it will determine how I use
classes. Here are two bits of code.

class foo1:
def __init__(self, i):
self.r = i
self.j = 5

>>h = foo1(1)
>>h.r

1
>>h.j

5


Now take this example

class foo2:
def __init__(self):
self.j = 5

>>h = foo2()
>>h.j

Traceback (most recent call last):
File "<stdin>", line 1, in ?
AttributeError: foo2 instance has no attribute 'j'

I can't figure out why it is working this way. I figure I must be thinking
about this wrong. I was thinking that I could bind attributes to the class
from within methods using the self prefix. According to this example I can
only when passing other info into the init. Is there a rule that I am just
not aware off? Am I totally off base (I am not real experienced)? What is
the self prefix for then if not to bind up the tree?

Thanks,
LeRoy

__________________________________________________ _______________
Express yourself instantly with MSN Messenger! Download today - it's FREE!
http://messenger.msn.click-url.com/g...ave/direct/01/


Michael Hoffman 09-02-2005 08:19 PM

Re: defining classes
 
LeRoy Lee wrote:

> class foo2:
> def __init__(self):
> self.j = 5
>
>>> h = foo2()
>>> h.j

>
> Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> AttributeError: foo2 instance has no attribute 'j'


Try again:

>>> class foo2:

.... def __init__(self):
.... self.j = 5
....
>>> h = foo2()
>>> h.j

5
--
Michael Hoffman

Grant Edwards 09-02-2005 08:19 PM

Re: defining classes
 
On 2005-09-02, LeRoy Lee <l3e3e7@hotmail.com> wrote:

> Now take this example
>
> class foo2:
> def __init__(self):
> self.j = 5
>
>>>h = foo2()
>>>h.j

> Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> AttributeError: foo2 instance has no attribute 'j'


Works fine for me either "batch" mode:

$ cat testit.py
class foo2:
def __init__(self):
self.j = 5

h = foo2()
print h.j

$ python testit.py
5

or interactivly:

Python 2.3.4 (#2, Aug 25 2005, 10:06:55)
[GCC 3.4.1 (Mandrakelinux 10.1 3.4.1-4mdk)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class foo2:

... def __init__(self):
... self.j = 5
...
>>> h = foo2()
>>> h.j

5
>>>


--
Grant Edwards grante Yow! I'm definitely not
at in Omaha!
visi.com

Steve Horsley 09-02-2005 08:31 PM

Re: defining classes
 
LeRoy Lee wrote:
> I have been searching for the answer to this as it will determine how I
> use classes. Here are two bits of code.
>
> class foo1:
> def __init__(self, i):
> self.r = i
> self.j = 5
>
>>> h = foo1(1)
>>> h.r

>
> 1
>
>>> h.j

>
> 5
>
>
> Now take this example
>
> class foo2:
> def __init__(self):
> self.j = 5
>
>>> h = foo2()
>>> h.j

>
> Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> AttributeError: foo2 instance has no attribute 'j'
>
> I can't figure out why it is working this way. I figure I must be
> thinking about this wrong. I was thinking that I could bind attributes
> to the class from within methods using the self prefix. According to
> this example I can only when passing other info into the init. Is there
> a rule that I am just not aware off? Am I totally off base (I am not
> real experienced)? What is the self prefix for then if not to bind up
> the tree?
>


It works for me.

>>> class foo2:

.... def __init__(self):
.... self.j = 5
....
>>> h = foo2()
>>> h.j

5
>>>


Are you sure you clicked the save button of the editor before
running the code? (Been there, done that myself.)

Or if you're importing a module that contains the code, did you
reload the module after editing the code and before creating a
new class instance? (Been there, wasted lots of time myself.)


Steve



All times are GMT. The time now is 04:46 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.