Jak przypisać do powtarzającego się pola?

88

Używam buforów protokołów w Pythonie i mam Personwiadomość

repeated uint64 id

ale kiedy próbuję przypisać mu wartość, taką jak:

person.id = [1, 32, 43432]

Pojawia się błąd: Assigment not allowed for repeated field "id" in protocol message object Jak przypisać wartość do powtarzającego się pola?

PaolaJ.
źródło

Odpowiedzi:

118

Zgodnie z dokumentacją nie możesz bezpośrednio przypisać do powtarzającego się pola. W takim przypadku możesz zadzwonić, extendaby dodać wszystkie elementy z listy do pola.

person.id.extend([1, 32, 43432])
Tim
źródło
11
Podobnie, aby dodać pojedynczą wartość, użyj append()np person.id.append(1). Dotyczy to wszystkich pól protobuf repeated .
Hindol
17
appendnie działa, jeśli pole jest typem wiadomości, a nie surowym (np. string, int32 itp.). extenddziała dla typów wiadomości.
abeboparebop
4
Jeśli chcesz nadpisać powtarzające się pole typu wiadomości, musisz najpierw usunąć, a następnie rozszerzyć. del person.siblings[:] person.siblings.extend([Person(), Person()])
Neil,
1
pamiętaj, aby przekazać argumenty do rozszerzenia jako tablicę (lub listę), zawiń je w nawiasy, jeśli potrzebujesz!
Nicholas Gentile
33

Jeśli nie chcesz go przedłużać, ale całkowicie go nadpisać, możesz:

person.id[:] = [1, 32, 43432]

Takie podejście będzie również działać w celu całkowitego oczyszczenia pola:

del person.id[:]
kirpit
źródło
3
W przypadku powtarzających się typów złożonych nie możesz użyć person.id [:] = [xxx] do przypisania zamiany. Musisz najpierw je wszystkie usunąć, a następnie przedłużyć
ospider