[IronPython] **kwargs and __getattr__ handling in csharp functions and classes?

Alex News anleewxs at gmail.com
Tue Apr 14 20:58:58 CEST 2009


Well I am either suffering from severe user error, or it is not in the
suggested locations.  The best I could find was
Microsoft.Scripting.Actions.Dynamic.  It implements IDynamicObject.
It does not have the aforementioned TryGetMember function to override,
but does have a GetMember function to override.


On Tue, Apr 14, 2009 at 2:31 PM, Dino Viehland <dinov at microsoft.com> wrote:
> I think it might be just “Dynamic” in 2.0.
>
>
>
> From: users-bounces at lists.ironpython.com
> [mailto:users-bounces at lists.ironpython.com] On Behalf Of Curt Hagenlocher
> Sent: Tuesday, April 14, 2009 11:05 AM
> To: Discussion of IronPython
> Subject: Re: [IronPython] **kwargs and __getattr__ handling in csharp
> functions and classes?
>
>
>
> It should be Microsoft.Scripting.DynamicObject in 2.0.
>
> On Tue, Apr 14, 2009 at 11:02 AM, Alex News <anleewxs at gmail.com> wrote:
>
> Current IronPython = 2.01?  I have Microsoft.Scripting.Core
> referenced, and can't find DynamicObject.  There is an
> Microsoft.Scripting.Actions.IDynamicObject, and a
> Microsoft.Scripting.Runtime.IOldDynamicObject.  I'm sure I'm missing
> something very basic.
>
> We are using .net 2.0.50727 SP1
>
>
>
> On Tue, Apr 14, 2009 at 12:12 PM, Curt Hagenlocher <curt at hagenlocher.org>
> wrote:
>> In current versions of IronPython, DynamicObject is in
>> Microsoft.Scripting.Core as Microsoft.Scripting.DynamicObject.  In .NET
>> 4.0
>> System.Core, the same class will be called System.Dynamic.DynamicObject.
>> (I
>> just noticed this naming discrepancy today, and I think we should probably
>> move it to at least Microsoft.Dynamic for the 2.6 release.)
>>
>> On Tue, Apr 14, 2009 at 8:31 AM, Alex News <anleewxs at gmail.com> wrote:
>>>
>>> Much appreciated, I will give that a try.  In what namespace is
>>> DynamicObject declared?  (I assume the required assemblies are already
>>> referenced if I'm pulling in IronPython).
>>>
>>> Thanks again,
>>> Alex
>>>
>>>
>>> On Tue, Apr 14, 2009 at 11:16 AM, Dino Viehland <dinov at microsoft.com>
>>> wrote:
>>> > For kwargs you need to decorate the function w/ a ParamDictionary
>>> > attribute such as:
>>> >
>>> > public void __init__(CodeContext/*!*/ context, object o,
>>> > [ParamDictionary] IAttributesCollection kwArgs)
>>> >
>>> > For __getattr__ IronPython will recognize a special name
>>> > "GetBoundMember" method such as:
>>> >
>>> > using System;
>>> > using System.Runtime.CompilerServices;
>>> >
>>> > public class Foo {
>>> >    [SpecialName]
>>> >    public object GetBoundMember (string name) {
>>> >        return name;
>>> >    }
>>> > }
>>> >
>>> >
>>> > You can also do "GetCustomMember" which is like __getattribute__.  But
>>> > for this one what you really want to do is inherit directly from the
>>> > DynamicObject class and override TryGetMember.  Then it'll work not
>>> > only w/
>>> > Python but w/ other DLR based languages as well (e.g. C#, VB.NET,
>>> > IronRuby,
>>> > etc...).
>>> >
>>> >
>>> >> -----Original Message-----
>>> >> From: users-bounces at lists.ironpython.com [mailto:users-
>>> >> bounces at lists.ironpython.com] On Behalf Of Alex News
>>> >> Sent: Tuesday, April 14, 2009 7:32 AM
>>> >> To: users at lists.ironpython.com
>>> >> Subject: [IronPython] **kwargs and __getattr__ handling in csharp
>>> >> functions and classes?
>>> >>
>>> >> I would like to write some functions and classes in csharp that
>>> >> interact nicely python.  I would like to write a function that can
>>> >> respond to keyword arguments, and a class that can dynamically resolve
>>> >> __getattr__.
>>> >>
>>> >> For the function I tried creating a function that takes a
>>> >> IronPython.Runtime.PythonDictionary, but did not work.  For a class I
>>> >> tried creating a function that have a method __getattr__, but that
>>> >> failed too.
>>> >>
>>> >> I see there is a IronPython.Runtime.PythonFunction and some other
>>> >> interesting classes in the Runtime, but it is not apparent exactly how
>>> >> I could use them.
>>> >>
>>> >> I can, luckily, fudge much of what I want to do by creating small
>>> >> python classes and functions in python to proxy the values to
>>> >> underlying csharp classes.  However thing would be cleaner if I could
>>> >> do it directly in csharp.
>>> >>
>>> >> Thanks in advance for any suggestions.
>>> >>
>>> >> Alex
>>> >> _______________________________________________
>>> >> 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
>>> >
>>> _______________________________________________
>>> 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
>>
>>
> _______________________________________________
> 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