1

所以我试图创建一个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

所以它似乎总是将“字符串”传递给超类的单参数构造函数。我尝试用 super(TableColumn,self) 替换 super(TableColumn, self)。__init __() 以明确确定我要调用无参数构造函数,但似乎没有任何效果。

4

1 回答 1

1

__init__从 .NET 类派生时,您实际上不想实现;您需要改为__new__实施

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

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

于 2012-06-15T15:25:43.800 回答