반복 필드에 할당하는 방법은 무엇입니까?


88

파이썬에서 프로토콜 버퍼를 사용하고 있는데 Person메시지가 있습니다.

repeated uint64 id

하지만 다음과 같이 값을 할당하려고 할 때 :

person.id = [1, 32, 43432]

오류가 발생합니다. Assigment not allowed for repeated field "id" in protocol message object 반복되는 필드에 값을 할당하는 방법은 무엇입니까?

답변:


118

당으로 문서 , 직접 반복 필드에 할당 할 수 없습니다. 이 경우를 호출 extend하여 목록의 모든 요소를 ​​필드에 추가 할 수 있습니다 .

person.id.extend([1, 32, 43432])

11
마찬가지로 단일 값을 추가하려면 append(), 예를 들어 person.id.append(1). 이것은 모든 protobuf repeated 필드에 적용됩니다 .
Hindol

17
append필드가 원시 유형 (문자열, int32 등)이 아닌 메시지 유형 인 경우 작동하지 않습니다. extend메시지 유형에 대해 작동합니다.
abeboparebop

4
반복되는 메시지 유형 필드를 덮어 쓰려면 먼저 삭제 한 다음 확장해야합니다. del person.siblings[:] person.siblings.extend([Person(), Person()])
Neil


1
확장 할 인수를 배열 (또는 목록)로 전달하고 필요한 경우 대괄호로 묶는 것을 잊지 마십시오!
Nicholas Gentile

33

확장 하지 않고 완전히 덮어 쓰 려면 다음을 수행 할 수 있습니다.

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

이 접근 방식은 필드를 완전히 지우는 데에도 효과적입니다.

del person.id[:]

3
반복되는 복합 유형의 경우 person.id [:] = [xxx]를 사용하여 바꾸기를 지정할 수 없습니다. 먼저 모두 삭제 한 다음 확장해야합니다
ospider

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.