[IronPython] Using Python special methods in C#
Erich Neuwirth
erich.neuwirth at univie.ac.at
Sat Jul 26 22:21:53 CEST 2008
another thing.
when you use MakeArgs,
all the numbers that end up in the parameter string should
be wrapped in a call to the function RNumber.
RNumber makes sure the string has the correct decimal separator
in an language combination of Excel, Windows, and R.
Michael Foord wrote:
> Dino Viehland 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.
>>
>
> Hello Dino,
>
> The following doesn't work for me with IronPython 2.0B3.
>
> namespace example
> {
> public class Example
> {
> private Dictionary<string, object> store = new Dictionary<string,
> object>();
>
> public void __setattr__(string key, object value)
> {
> store[key] = value;
> }
>
> public object __getattr__(string key)
> {
> return store[key];
> }
> }
> }
>
>
> When using it:
>
> >>> clr.AddReference('example')
> >>> from example import Example
> >>> e = Example()
> >>> e.a = 1
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> AttributeError: 'Example' object has no attribute 'a'
>
>
> Do you know what protocol methods actually work?
>
> Michael
>
>> 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: users-bounces at lists.ironpython.com
>> [mailto:users-bounces at lists.ironpython.com] 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
>>> Users at lists.ironpython.com
>>> 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
>> 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
>>
>
>
--
Erich Neuwirth, University of Vienna
Faculty of Computer Science
Computer Supported Didactics Working Group
Visit our SunSITE at http://sunsite.univie.ac.at
Phone: +43-1-4277-39464 Fax: +43-1-4277-39459
More information about the Ironpython-users
mailing list