Thanks guys. I understand this a lot better now. -Dan
On Sun, Jul 13, 2008 at 1:04 PM, Dino Viehland <[EMAIL PROTECTED]> wrote: > Srivatsn's blog is an important piece of the puzzle, but the more general > answer is implementing the __*__ method directly should always work. If it > doesn't then it's a bug - like where __repr__ wasn't working w/o implementing > the interface until recently. > > But there is a good reason to not implement the __*__ method - and that's > ensuring that your objects will work good in a multi-language environment. > What IronPython does to expose .NET objects into Python is it maps a large > number of .NET interfaces and methods into Python methods. If you'd like to > see the all of the mappings they're contained entirely in TypeInfo.cs. So > instead of implementing __getitem__ you can implement a C# indexer, instead > of __enter__/__exit__ you can implement IDisposable - assuming you're not > doing more interesting things w/ __enter__/__exit__, etc... If there's some > mapping that you think should exist but we don't have let us know - for > example until recently we had overlooked mapping IDisposable. > > To get the best interop if there's a .NET interface or operator method that > maps onto the Python methods you should use that. That includes the extended > operators that we've defined for the DLR default binder like GetCustomMember > as Srivatsn's blog demonstrates. Otherwise fallback to the __*_- method. > > -----Original Message----- > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Michael Foord > Sent: Sunday, July 13, 2008 10:21 AM > To: Discussion of IronPython > Subject: Re: [IronPython] Using Python special methods in C# > > Dan Eloff wrote: >> Something I've found a little difficult in C# is python special >> methods. It seems sometimes you can just declare them on the C# class, >> (__repr__?) and they will work, other times you need to implement an >> interface (__call__?) is there any place this is documented? >> >> I'm a little confused about how to add special methods on C# classes. >> >> I want to add __getattr__ to a C# class (actually a subclass of >> PythonDictionary), and I have no idea how. >> > > This example from Srivatsn shows you how: > > http://blogs.msdn.com/srivatsn/archive/2008/04/12/turning-your-net-object-models-dynamic-for-ironpython.aspx > > Michael >> Thanks, >> -Dan >> _______________________________________________ >> Users mailing list >> [email protected] >> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com >> > > > -- > http://www.ironpythoninaction.com/ > http://www.voidspace.org.uk/ > http://www.trypython.org/ > http://www.ironpython.info/ > http://www.theotherdelia.co.uk/ > http://www.resolverhacks.net/ > > _______________________________________________ > 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
