В дополнение к тому, что правильно указано в ответах выше, стоит явно уточнить, что когда __iadd__
переопределяется, операция x += y
НЕ заканчивается окончанием метода __iadd__
.
Вместо этого он заканчивается на x = x.__iadd__(y)
. Другими словами, Python присваивает возвращаемое значение вашей реализации __iadd__
объекту, который вы «добавляете», ПОСЛЕ завершения реализации.
Это означает, что можно изменить левую часть x += y
, чтобы завершился неявный шаг. Рассмотрим, что может произойти, когда вы добавляете к чему-то, что находится в списке:
>>> x[1] += y # x has two items
Теперь, если ваша реализация __iadd__
(метод объекта в x[1]
) ошибочно или по назначению удаляет первый элемент (x[0]
) с самого начала списка, Python затем запускает ваш метод __iadd__
) & amp; попробуйте присвоить его возвращаемое значение x[1]
. Который больше не будет существовать (он будет в x[0]
), в результате получится ÌndexError
.
Или, если ваш __iadd__
вставляет что-то в начало x
приведенного выше примера, ваш объект будет находиться в x[2]
, а не x[1]
, а все, что было ранее в x[0]
, будет теперь на x[1]
и присваивается возвращаемое значение вызова __iadd__
.
Если кто-то не понимает, что происходит, возникающие ошибки могут стать кошмаром для исправления.
Excel interop является довольно болезненным. Я вскопал старый проект, который я имел, сделал немного игры, и я думаю, что это - то, что Вы ищете. Другие комментаторы правы, но, по крайней мере по моему опыту, существует намного больше к вызову SaveAs (), чем Вы ожидали бы, использовали ли Вы те же объекты (без interop обертки) в VBA.
Microsoft.Office.Interop.Excel.Workbook wbk = excelApplication.Workbooks[0]; //or some other way of obtaining this workbook reference, as Jason Z mentioned
wbk.SaveAs(filename, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing);
wbk.Close();
excelApplication.Quit();
Должен любить все они Тип. Missings. Но я думаю, что они необходимы.
Вместо того, чтобы использовать ExcelApplication, можно использовать Рабочую книгу, возражают и называют SaveAs () методом. Можно передать обновленное имя файла туда.