[Tutor] Class stuff

alan.gauld@bt.com alan.gauld@bt.com
Thu, 23 Nov 2000 17:29:44 -0000


> I have a regular old dictionary called Rooms, and a class called Room.

I assume you have actually created an empty dictionary somewhere:

Rooms = {}

> Room is defined as follows -
> 
> class Room:
> 	def __init__(self,x,y,z):
> 	self.Position=(x,y,z)
> 	self.this=self
> 	if Rooms.has_key(str(x)+','+str(y)+','+str(z)):
> 		print 'Room already exists'
> 	else:
> 		Rooms[str(x)+','+str(y)+','+str(z)]=self

Assuming the indentation is only wrong in the mail 
- otherwise youd get a syntax err I suspect....

it looks OK.

How exactly are you using this? Is it in a module?
Is the Rooms declaration in the same module, in other 
words are you doing something like this:

>>> import room
>>> Rooms = {}
>>> for i in range(5):
       Room(i,i+1,i+2)

>>> Rooms


Or is it all in a single file? Or even all at the >>> prompt?

> When I create an object it all works fine. When I type Rooms at the
> interpreter prompt, it says:
> "call of non-function (type None)"

I'm not clear what your doing, Heres a snapshot of an interactive session:

>>> r = {}
>>> class c:
...  def __init__(s,i):
...    r[i] = s
...
>>> r
{}
>>> c(1)
<__main__.c instance at 7f77c0>
>>> r
{1: <__main__.c instance at 7f77c0>}

Seems to do what you are trying to do?


> 
> I've debugged it down to the last line, so that referencing 
> the class as self does not work. 

It should do.

Alan G.