[IronPython] Using Python special methods in C#
Erich Neuwirth
erich.neuwirth at univie.ac.at
Sat Jul 26 23:14:59 CEST 2008
Sorry for the nonsense,
I did not notice I was answering to the wrong email.
Hit the reply button with the cursor one line off.
Erich Neuwirth wrote:
> 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