У меня есть объект ProtoBuf. Я хотел бы определить, когда определенное поле использует значение по умолчанию, и явно предоставлено.Проверьте, используется ли значение ProtoBuf по умолчанию
message vector_measurement
{
measurement x = 1;
measurement y = 2;
measurement z = 3;
}
...
message measurement
{
...
float value = 2;
...
}
Когда я использую HasField
возвращается True
, но это явно не тот случай:
c = my_vector
print(c)
# x {
# value: 60.3813476562
# }
# y {
# value: 0.444311201572
# }
# z {
# }
print(c.x)
# value: 60.3813476562
print(c.z)
#
print(c.z==None)
# False
print(c.z.value)
# 0
print(c.HasField('x'), c.HasField('z'))
# (True, True)
print (c.z.HasField('value'))
# ValueError: Protocol message has no non-repeated submessage field "value"
Строковое представление, кажется, знает, что z
использует значение по умолчанию; как я могу сам это обнаружить?