所以我试图创建一个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 __
()以明确确定我想调用无参数构造函数,但似乎没有任何东西工作。
答案 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构造函数。