(Iron)Python继承构造函数问题

时间:2012-06-14 21:30:10

标签: .net python inheritance constructor ironpython

所以我试图创建一个DataGridViewColumn的子类,它有一个无参数的构造函数,以及一个带有一个参数的构造函数,它需要类型DataGridViewCell。这是我的班级:

class TableColumn(DataGridViewColumn):
    def __init__(self, string):
        super(TableColumn, self)
        self.Text = string
        self.CellTemplate = DataGridViewTextBoxCell()
        self.ReadOnly = True

每当我尝试传入一个字符串作为参数时就像这样:

foo = TableColumn('Name')

它总是给我这个:

TypeError: expected DataGridViewCell, got str

所以它似乎总是将'string'传递给超类的单参数构造函数。我已经尝试用super(TableColumn,self)替换super(TableColumn,self)。__ init __()以明确确定我想调用无参数构造函数,但似乎没有任何东西工作。

1 个答案:

答案 0 :(得分:1)

实际上,当从.NET类派生时,您实际上不希望实现__init__; you need to implement __new__ instead

class TableColumn(DataGridViewColumn):
    def __new__(cls, string):
        DataGridViewColumn.__new__(cls)
        self.Text = string
        self.CellTemplate = DataGridViewTextBoxCell()
        self.ReadOnly = True

基本上,.NET基类的构造函数需要在Python子类'__init__之前调用(但在__new__之后),这就是为什么你得到了错误的DataGridViewColumn构造函数。