Полностью обернуть объект в Python

Использование стандартной команды git diff (также хорошо для сценариев):

git diff --name-only <sha>^ <sha>

Если вы хотите также статус измененных файлов:

git diff --name-status <sha>^ <sha>

Это хорошо работает с слияния.

30
задан Smashery 18 September 2009 в 08:19
поделиться

4 ответа

Примечание: Этот ответ действительно старый и может не работать на современных Питонах. Я считаю, что раньше он работал на 2.

1
ответ дан 27 November 2019 в 18:28
поделиться

Под «существующим объектом» вы подразумеваете экземпляр другого класса? Мне кажется, что вам просто нужно наследовать от базового класса. При создании нового объекта передайте сведения о базовом объекте или добавьте метод в свой новый класс, который копирует данные экземпляра базового класса в себя.

0
ответ дан 27 November 2019 в 18:28
поделиться

Я так не думаю, кроме добавления @SuppressWarnings ("unchecked") .

Этот отчет об ошибке содержит больше информации, но сводится к тому, что компилятор не любит массивы универсальных типов.

и выполнение isinstance и специальных методов требует кропотливой и громоздкой детальной работы.

По сути, __ slots __ означает, что класс является особым, каждый экземпляр является легковесным «объектом значения» НЕ для подвергаться дальнейшим изощренным манипуляциям, обертыванию и т. д., потому что необходимость сохранять несколько байтов для каждого экземпляра этого класса отменяет все обычные заботы о гибкости и т. д .; Поэтому неудивительно, что работа с такими экстремальными, редкими классами так же гладко и гибко, как вы можете иметь дело с более чем 99% объектов Python, действительно затруднительно. Итак, вам нужно иметь дело с __ slots __ (с точки зрения написания, тестирования, отладки и поддержки сотен строк кода только для этих угловых случаев),

38
ответ дан 27 November 2019 в 18:28
поделиться

__ getattr __ имеет то преимущество, что он вызывается только тогда, когда атрибут не существует, поэтому вам не нужен явный список - все, что вы не определяете, будет автоматически проксироваться.

__ setattr __ сложнее, потому что он всегда вызывается. Убедитесь, что вы используете вызов суперкласса или объект .__ setattr __ при установке собственных атрибутов; использование setattr () внутри __ setattr __ вызовет бесконечную рекурсию.

Последний бит, влияющий на isinstance, очень сложен. Вы можете сделать это с помощью присвоения переменной вашего экземпляра оболочки. __ class __ (но это также переопределяет порядок разрешения словаря классов) или путем динамического конструирования вашего типа оболочки с помощью метакласса. Поскольку isinstance так редко встречается в коде Python, кажется излишним пытаться его обмануть.

Дополнительная информация о методах доступа к специальным атрибутам.

Еще больше информации о них, а также некоторая помощь с метаклассами.

4
ответ дан 27 November 2019 в 18:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: