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

Программы на Python
Ответить
Anonymous
 Написание метода 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 ... e-others-a
Ответить

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

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

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

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

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