Python: написание метода addOrUpdate, который может обновлять некоторые параметры, но оставлять другие как есть.Python

Программы на Python
Ответить
Anonymous
 Python: написание метода addOrUpdate, который может обновлять некоторые параметры, но оставлять другие как есть.

Сообщение Anonymous »

Я хотел бы написать одну функцию, которая либо создает новый экземпляр определенного типа объекта, либо изменяет только указанные параметры существующего экземпляра (а остальные параметры оставляет как есть).
Мне также нужно указать значения по умолчанию для параметров нового экземпляра.
Вот пример, иллюстрирующий проблему:

Код: Выделить всё

class Feature:
def __init__(self,
title='DefaultTitle',
number=-1):
self.title=title
self.number=number

def addOrUpdateFeature(
existingFeature=None,
title='NewTitle',
number=0):
if existingFeature:
existingFeature.title=title
existingFeature.number=number
return True
else:
return Feature(title=title,number=number)

# part 1: create a new feature with title='featureA' and number=1

a=addOrUpdateFeature(title='featureA',number=1)

print(f'part 1: title={a.title}  number={a.number}')

# part 2: modify that feature's number, but leave its title as-is
#  ** the problem: with this code, title is overwritten as well

addOrUpdateFeature(existingFeature=a,number=2)

print(f'part 2: title={a.title}  number={a.number}')
Запуск сценария:

Код: Выделить всё

PS C:\Users\caver\Documents\GitHub> python argsTest.py
part 1: title=featureA  number=1
part 2: title=NewTitle  number=2
Один из вариантов — посмотреть, какие аргументы указаны в вызове addOrUpdateFeature, как в этом вопросе. Это кажется осуществимым и представляет собой хороший облегченный вариант для вызывающего кода (чтобы обновить экземпляр, укажите только те kwargs, которые вы хотите изменить), но он не самый чистый, отчасти потому, что сигнатура функции сводится к использованию **kwargs.

Подробнее здесь: https://stackoverflow.com/questions/798 ... -but-leave
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»