[IronPython] How to reference List objects?

Larry Danberger larry.danberger at Nubium.com
Tue Jun 9 03:06:55 CEST 2009


Hi All,
I switched from a list to a dictionary of dictionaries, and it works as I
needed it.  Don't know if that's a performance hit or not, but hey it works.
 
..and yes I was retyping and had two typos (good eye!), should have been
TypeError: 'List[book]' object is unsubscriptable   not  'List[books]'
object is unsubscriptable, and my code declared the book class methods as
public.

Thank you all for your help.  I'm sure this won't be my last question!

-Larry

-----Original Message-----
From: users-bounces at lists.ironpython.com
[mailto:users-bounces at lists.ironpython.com] On Behalf Of Curt Hagenlocher
Sent: Monday, June 08, 2009 3:02 PM
To: Discussion of IronPython
Subject: Re: [IronPython] How to reference List objects?

It indicates a nested class:

class PythonEngine {
    class book {
    }
}

You can definitely interact with BCL generic List classes in this fashion:

>>> from System.Collections.Generic import List a = List[str]()
>>> a.Add('abc')
>>> a.Add('def')
>>> a
List[str](['abc', 'def'])
>>> a[0]
'abc'
>>> ^Z

There are a number of subtle problems with the output text in the original
report; was this typed in or copy-and-pasted?


On Mon, Jun 8, 2009 at 1:55 PM, Justin Regele <jregele23 at gmail.com> wrote:


	Ah, I see. Would a python list then need to be called the way he is
doing it, though. Is this a silverlight issue? I am wondering if he can just
make a python list out of his Book C# class rather than exporting them as a
list. I am sure there would be some performance issues, so maybe that is the
reason for this way of doing it.
	
	Wondering about this error:

	System.Collections.Generic.
	List'1[testapp.PythonEngine+book]
	 
	
	What does the '+' indicate? 
	


	On Mon, Jun 8, 2009 at 1:32 PM, Michael Foord
<fuzzyman at voidspace.org.uk> wrote:
	

		Justin Regele wrote:
		

			Type Errors where the object is unscriptable means
that it does not have any indices intialized.
			
			Use the python interactive interpreter to play
around with list methods, and see how they work correctly. This is one of
pythons best weapons. if you don't know what objects are in a module, or
what attributes/methods are in a class type in dir(<module or classname>)
and it will spell it out for you.
			
			you do need to initialize a list before access,
however.
			so you CANT do this
			
			x = []
			x[0] = 'something'
			
			you would have to do this(making a list of 10 None
objects)
			x = [None] * 10
			x[0] = 'something'
			
			OR use the append() method to make the list more
like a dynamic array
			
			x = []
			x.append('something')
			
			this is the python way of doing it, but i'm not sure
why you need a .NET list array.
			


		He is creating the list from C# and making it available to
Python code. As far as I can tell he is doing it right, although maybe the
fact that his C# book class is private is interfering with it?
		
		Michael
		
		
		


			On Mon, Jun 8, 2009 at 11:27 AM, Larry Danberger
<larry.danberger at nubium.com <mailto:larry.danberger at nubium.com>> wrote:
			
			   Hi all,
			   I'm new to Python and IronPython, sorry if this
is obvious.  I
			   haven't found
			   answer searching web or in IronPython In Action
book...
			
			   I have embedded IronPython into silverlight app
for scripting,
			   which is
			   working (wow! Btw).  I use scope.SetVariable for
dictionaries
			   which works as
			   expected.
			
			   However when passing in a list I am unable to
access the objects
			   within a
			   list.
			   For the example below when trying
			   x = books[0].Name
			   I get
			   TypeError: 'List[books]' object is
unsubscriptable
			
			   If I do
			   x = books
			   I get back
	
System.Collections.Generic.List'1[testapp.PythonEngine+book]
			
			   If I do
			   Len(books)
			   I get back 4.
			
			   How do I access them individually (by name etc.)?
			
			   My code looks something like this:
			
			   Class book
			   {
			     int ID { get; set; }
			     String Name { get; set; }
			     String Author { get; set; }
			     String Description { get; set; }
			   }
			
			   ...
			   List<book> _books = new List<book>();
			
			   _books.Add(new book { ID=1, Name="book1",
Author="author1",
			   Description="Description1"});
			   _books.Add(new book { ID=2, Name="book2",
Author="author2",
			   Description="Description2"});
			   _books.Add(new book { ID=3, Name="book3",
Author="author3",
			   Description="Description3"});
			   _books.Add(new book { ID=4, Name="book4",
Author="author4",
			   Description="Description4"});
			
			   ...
			   _scope.SetVariable("books", _books);
			
			
			   Any help appreciated, thanks!
			   -Larry
			
			   _______________________________________________
			   Users mailing list
			
			   Users at lists.ironpython.com
<mailto:Users at lists.ironpython.com>

	
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
			
			
			
	
------------------------------------------------------------------------


			_______________________________________________
			Users mailing list
			Users at lists.ironpython.com
	
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
			 
			

		
		
		-- 
		http://www.ironpythoninaction.com/
		http://www.voidspace.org.uk/blog



		_______________________________________________
		Users mailing list
		Users at lists.ironpython.com
	
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
		



	_______________________________________________
	Users mailing list
	Users at lists.ironpython.com
	http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
	
	






More information about the Ironpython-users mailing list