"Пустой" прием установит его на нулевое значение для типа, который является не обязательно тем же как значением по умолчанию для свойства. Во-первых, если это - новый объект, почему не просто оставляют его в покое? С другой стороны, используйте TypeDescriptor
:
PropertyDescriptor prop = TypeDescriptor.GetProperties(foo)["Bar"];
if (prop.CanResetValue(foo)) prop.ResetValue(foo);
Это уважает и [DefaultValue]
и эти Reset{name}()
шаблоны (как используется путем привязки и сериализация), создания ее очень универсальной и допускающей повторное использование.
при выполнении большого количества этого можно также получить повышение производительности с помощью TypeDescriptor
вместо отражения, путем многократного использования PropertyDescriptorCollection
и использования HyperDescriptor (тот же код, но очень быстрее или, чем refletion или, чем сырые данные TypeDescriptor
).
Просматривая исходный код boto, я обнаружил, что объект Key имеет метод «копирования». Благодарим за предложение по работе CopyObject.
S3 позволяет копировать объект за объектом. Операция CopyObject создает копию объекта, когда вы указываете ключ и сегмент исходного объекта, а также ключ и сегмент целевого назначения. Не уверен, что у boto есть компактная реализация.
Где сегмент - это сегмент назначения:
bucket.copy_key(new_key,source_bucket,source_key)