4

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、デフォルト値を使用していることを認識しているようです。どうすればこれを自分で検出できますか?

4

1 に答える 1