【发布时间】:2020-12-03 22:33:58
【问题描述】:
我正在探索协议缓冲区的使用,并希望使用 protobuf3 中的新 Timestamp 数据类型。这是我的 .proto 文件:
syntax = "proto3";
package shoppingbasket;
import "google/protobuf/timestamp.proto";
message TransactionItem {
optional string product = 1;
optional int32 quantity = 2;
optional double price = 3;
optional double discount = 4;
}
message Basket {
optional string basket = 1;
optional google.protobuf.Timestamp tstamp = 2;
optional string customer = 3;
optional string store = 4;
optional string channel = 5;
repeated TransactionItem transactionItems = 6;
}
message Baskets {
repeated Basket baskets = 1;
}
从这个 .proto 文件生成 python 类后,我尝试使用生成的类创建一些对象。代码如下:
import shoppingbasket_pb2
from google.protobuf.timestamp_pb2 import Timestamp
baskets = shoppingbasket_pb2.Baskets()
basket1 = baskets.baskets.add()
basket1.basket = "001"
basket1.tstamp = Timestamp().GetCurrentTime()
失败并出现错误:
AttributeError: 不允许对协议消息对象中的复合字段“tstamp”进行赋值。
谁能向我解释为什么这不起作用,因为我很困惑。
【问题讨论】: