[英]Why are extension attributes inaccessible in python protobuf objects?
我正在嘗試用 Python 讀取和分析來自紐約地鐵的 GTFS 實時數據。 到目前為止,我已經成功地使用了gtfs-realtime.proto
和nyct-subway.proto
來生成正確的 Python 類並將 protobuf 數據解析為 Python 對象。
我的問題是在嘗試訪問這些對象中的某些字段時出現的。 例如,標題 ( feed.header
) 如下所示:
gtfs_realtime_version: "1.0"
incrementality: FULL_DATASET
timestamp: 1533111586
[nyct_feed_header] {
nyct_subway_version: "1.0"
trip_replacement_period {
route_id: "A"
replacement_period {
end: 1533113386
...
我可以使用點訪問訪問前三個屬性,但不能使用nyct_feed_header
。 我懷疑這是因為它是nyct-subway.proto
擴展的一部分,而其他三個是原始擴展的一部分。
我發現這個屬性在 feed.header.ListFields() 中是可訪問的,但由於它返回一個 (name, attribute) 對的列表,所以訪問充其量是很尷尬的。
為什么擴展的屬性不能像其他屬性一樣通過點訪問來訪問? 有沒有比使用 ListFields 更好或更優雅的方式來訪問它們?
通過對象上的Extensions
屬性訪問Extensions
(請參閱文檔)。 例如使用 GTFS 和 NYCT 擴展:
import gtfs_realtime_pb2 as gtfs
import nyct_subway_pb2 as nyct
feed = gtfs.FeedMessage()
feed.ParseFromString(...)
feed.entity[0].trip_update.trip.Extensions[nyct.nyct_trip_descriptor].direction
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.