Т.е. метод init вызывается два раза, а вот createEditor только один.
Тестовый пример:
import sys from PyQt4 import QtGui class TestDelegate1(QtGui.QStyledItemDelegate): """Тестовый делегат""" def __init__(self, parent = None): """Инициализация делегата""" print("Вызван метод init") super().__init__(parent) def createEditor(self, parent, option, index): """Создание редактора""" print("Вызван метод createEditor") return super().createEditor(parent, option, index) def setEditorData(self, editor, index): """Передача данных в редактор""" print("Вызван метод setEditorData") return super().setEditorData(editor, index) class TestDelegate2(QtGui.QStyledItemDelegate): """Тестовый делегат""" def __init__(self, parent = None): """Инициализация делегата""" print("Вызван метод init") super().__init__(parent) def createEditor(self, parent, option, index): """Создание редактора""" print("Вызван метод createEditor") return super().createEditor(parent, option, index) def setEditorData(self, editor, index): """Передача данных в редактор""" print("Вызван метод setEditorData") return super().setEditorData(editor, index) class MyWindow(QtGui.QWidget): """Окно""" def __init__(self): """Метод init""" super().__init__() self.setWindowTitle("Тест") #Модель model1 = QtGui.QStandardItemModel() model1.setColumnCount(3) model1.setRowCount(3) #Представление self.view1 = QtGui.QTableView() self.view1.setModel(model1) #Делегаты delegate1 = TestDelegate1() delegate2 = TestDelegate2() self.view1.setItemDelegateForColumn(0, delegate1) self.view1.setItemDelegateForColumn(1, delegate2) #Разметка layout = QtGui.QHBoxLayout(self) layout.addWidget(self.view1) #Создаем экземпляр приложение app = QtGui.QApplication(sys.argv) #Создаем эксземпляр класса MainWindow obj = MyWindow() #Показываем окно obj.show() #Запускаем цикл обработки событий sys.exit(app.exec_())