[Python.NET] Invoking a C# method with a python list

Mohamed Koubaa mohamed.koubaa at ansys.com
Mon Sep 24 11:11:02 EDT 2018


Denis,

I like the idea of empowering the user to customize/extend/disable the
method resolution logic.  I find that IronPython's resolution isn't always
ideal for our use cases.  For example we have methods which take
IEnumerable<double> and this usage is currently rejected by IronPython:

Obj.Func([1,3,4])

while this works

Obj.Func([1.,3.,4.])

I am not saying that IronPython is wrong but that as an API designer I'd
like the option to choose to allow the former for all of my
IEnumerable<double> methods or even to customize the resolution at the
granularity of individual methods/classes where we decide that is the
appropriate "User Experience".

I see a unit test on master with the .Overloads method being called from
python but this is useful for me only as a workaround.  We aim to present a
clean API to our scripting users who often are not experienced programmers.

Thanks,
Mohamed Koubaa
ANSYS Inc

On Mon, Sep 24, 2018 at 9:20 AM Denis Akhiyarov <denis.akhiyarov at gmail.com>
wrote:

> This link below is probably a good staring point for "TypeError: No
> method matches given arguments". But ideally we should bring back the
> skipping of method resolution logic within a context manager whenever the
> user knows what he/she is doing. There is also explicit `.Overloads` option
> to force through one of the overloaded methods.
>
> https://github.com/pythonnet/pythonnet/issues/265
>
> On Thu, Aug 2, 2018 at 10:11 AM Mohamed Koubaa <mohamed.koubaa at ansys.com>
> wrote:
>
>> Hello,
>>
>> I am using the 2.3 release branch.
>>
>> I have C# code like this:
>>     public class A {
>>         public A() {...}
>>     }
>>
>>     public class B {
>>         public B() {...}
>>         public static void Func(IEnumerable<A> input){
>>         }
>>     }
>>
>> I want to pass in a python list to Func but get this error:
>> >>> b=B()
>> >>> b.Func([A(), A()])
>> Traceback (most recent call last):
>>   File "<stdin>", line 1, in <module>
>> TypeError: No method matches given arguments
>>
>> I tried both IEnumerable and IList in the signature of 'Func'.  I know
>> that I can import System and create some .NET collection type and it works
>> well.
>>
>> Did I miss anything?  Is this usage pattern within the design goals of
>> pythonnet?  I assume this would have to be fixed in MethodBinder but I
>> wanted to try asking here first.
>>
>> Thanks!
>> Mohamed Koubaa
>> _________________________________________________
>> Python.NET mailing list - PythonDotNet at python.org
>> https://mail.python.org/mailman/listinfo/pythondotnet
>>
> _________________________________________________
> Python.NET mailing list - PythonDotNet at python.org
> https://mail.python.org/mailman/listinfo/pythondotnet
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/pythondotnet/attachments/20180924/2b5bd67d/attachment.html>


More information about the PythonDotNet mailing list