You need to override and call the base __new__ instead of __init__.  .NET has a 
simpler construction model than Python does and __new__ is what best 
corresponds to .NET constructors.

class Derived(Test.Base):
    def __new__(cls, i):
        return Test.Base.__new__(cls, i)

d = Derived()


From: [email protected] 
[mailto:[email protected]] On Behalf Of Zach Crowell
Sent: Friday, August 21, 2009 4:39 PM
To: [email protected]
Subject: [IronPython] Constructors & inheriting from standard .NET classes

I am unable to inherit from .NET classes which do not define a parameterless 
constructor.  Is this expected behavior? Is there another way to make this 
inheritance work?

Here's a simple case.

using System;

namespace Test
{
    public class Base
    {
        public Base(int i)
        {
        }
    }
}

import clr
clr.AddReference('Test')
import Test

class Derived(Test.Base):
    def __init__(self):
        pass

d = Derived()

Traceback (most recent call last):
  File "d:\tmp\class.py", line 9, in d:\tmp\class.py
TypeError: Derived() takes exactly 2 arguments (1 given)
_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to