如何区分 protobuf 重复字段被显式设置为空列表与根本未设置(在 python 中)?

How to distinguish between a protobuf repeated field being explicitly set to empty list vs. not set at all (in python)?

我的 protobuf 中有一个重复的字段暴露给调用者。我想知道调用者是否明确将其设置为空列表,或者该字段是否根本未设置。

HasField 方法不适用于重复的字段,所以我尝试使用 ListFields 方法枚举所有设置的字段。不幸的是,无论我是执行 "message.repeated_field.extend([])" 还是根本不设置该字段,该字段都不会显示在 ListFields() 中。

甚至可以区分设置为空和未全部设置的重复字段吗?如果是这样,任何指示都会有所帮助。

我所看到的一切都表明无法区分空的重复字段和未设置的重复字段。

我是这样解决的:

message NameList {
   repeated string names = 1;
}

message SomeResponse {
   optional NameList names = 1;
}

然后当你想发送一个空列表时,只需初始化 NameList 字段。