簡體   English   中英

為什么在 python protobuf 對象中無法訪問擴展屬性?

[英]Why are extension attributes inaccessible in python protobuf objects?

我正在嘗試用 Python 讀取和分析來自紐約地鐵的 GTFS 實時數據。 到目前為止,我已經成功地使用了gtfs-realtime.protonyct-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM