2014-11-13 32 views
0

我正在寫一個已經有protobuf消息定義的python應用程序。但是,我們需要使用自定義線路格式(我相信這是正確的術語)。如何使用谷歌Protobuf自定義編碼/解碼

你(在Python中)如何覆蓋基編碼函數?

我查看了encoder.py,這是一個嵌套仿函數的迷宮。那麼我需要什麼來修補(或其他)來指定我自己的編碼?

謝謝。

+0

呃,爲什麼要用protobuf? – rightfold

+0

Protobuf ====「電線格式」。如果你拿走它:*沒有任何東西*。你想做什麼?爲什麼? –

+0

由於現有的協議非常複雜,並且已經使用原始文件進行了定義。我現在試圖在python中編寫一個測試程序,並且想重寫編碼。我很確定我讀了protobuf支持自定義編碼的地方,但我找不到任何示例代碼。 – Kurt

回答

1

我不會推薦嘗試猴子修補編碼功能。你幾乎肯定會破壞一些東西。

你可以做的是寫一個獨立的函數,通過反射以任意方式編碼protobuf。有關此示例,請參閱Protobufs本身中的text_format.py模塊。該模塊完全基於公共描述符和反射接口以可替換的可讀格式對消息進行編碼和解碼。您可以按照相同的模式編寫任何格式的編碼器/解碼器。

+0

我需要等到週一回到辦公室才能接受這個答案。但是,謝謝您提供答案。 ;) – Kurt

+0

因此,從__author__標記判斷,你肯定是要交談的人!所以我認爲我想用我自己的實現重寫'PrintField()'函數? _plug in_新的實現如何? – Kurt

+0

我建議你寫一個類似'text_format.py'的全新模塊。你甚至可以開始複製'text_format.py',然後編輯它。沒有真正的「鉤入」代碼的好方法。想要使用新編碼的人必須明確地調用您的模塊。 –