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?

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])

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[:]

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.