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: [email protected]
[mailto:[email protected]] 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 <[email protected]> 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
<[email protected]> 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
<[email protected] <mailto:[email protected]>> 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
                        
                           [email protected]
<mailto:[email protected]>

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


                        _______________________________________________
                        Users mailing list
                        [email protected]
        
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
                         
                        

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



                _______________________________________________
                Users mailing list
                [email protected]
        
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
                



        _______________________________________________
        Users mailing list
        [email protected]
        http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
        
        



_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to