Python 中的 FIDL 繫結

本頁將舉例說明各種 FIDL 類型及其運作方式 例項化並用於 Python 中

大部分範例著重探討類型從 FIDL 轉譯至 Python 的方式。 如果您想瞭解實作 FIDL 伺服器或 請參閱教學課程或 「非同步 Python 最佳做法」頁面。

位元和列舉類型

在 Python 中,位元和列舉型別皆相同,因此這個範例 兩者都適用

FIDL

library fidl.example.library;

type ExampleBits = strict bits {
    EXAMPLE_ONE = 0x01;
    EXAMPLE_TWO = 0x02;
};

Python

import fidl.example_library

x = fidl.example_library.ExampleBits.EXAMPLE_ONE
y = fidl.example_library.ExampleBits.EXAMPLE_TWO
z = fidl.example_library.ExampleBits(1)  # creates EXAMPLE_ONE
a = fidl.example_library.ExampleBits(9999)
print(x)
print(y)
print(z)
print(a)

上方的 Python 程式碼會輸出下列輸出內容:

<ExampleBits.EXAMPLE_ONE: 1>
<ExampleBits.EXAMPLE_TWO: 2>
<ExampleBits.EXAMPLE_ONE: 1>
<ExampleBits.EXAMPLE_ONE|EXAMPLE_TWO|9996: 9999>

結構類型

Python 不會在建構期間強制執行類型和大小限制,因此, 是用過長字串建立的結構體,如下列範例所示 並不會在使用者嘗試將結構體編碼為 一個位元組這種做法也適用於其他複合結構,例如表格和 聯集。

FIDL

library example.library;

type ExampleStruct = struct {
    field_one uint32;
    field_two string:256;
};

Python

import example_library;

x = fidl.example_library.ExampleStruct(field_one=123, field_two="hello")
print(x)

上方的 Python 程式碼會輸出下列輸出內容:

ExampleStruct(field_one=123, field_two="hello")

如果您嘗試在沒有其中一個欄位的情況下建構這個類型, 會引發 TypeError 例外狀況,其中列出缺少的引數。

資料表類型

這些結構與結構類型相同,但沒有嚴格的建構函式 Google Cloud 就是最佳選擇任何未提供給建構函式的欄位都會設為 None

FIDL

library example.library;

type ExampleTable = table {
    1: field_one uint32;
    2: field_two string:256;
    3: field_three vector<uint32>:256;
};

Python

import fidl.example_library

x = fidl.example_library.ExampleTable(field_one=2)
y = fidl.example_library.ExampleTable(field_three=[1, 2, 3])
z = fidl.example_library.ExampleTable()
print(x)
print(y)
print(z)

這個 Python 程式碼會輸出下列輸出內容:

ExampleTable(field_one=2, field_two=None, field_three=None)
ExampleTable(field_one=None, field_two=None, field_three=[1, 2, 3])
ExampleTable(field_one=None, field_two=None, field_three=None)

聯合類型

在 Python 中,您可以透過多種方式建構這個物件。

FIDL

library example.library;

type ExampleUnion = strict union {
    1: first_kind uint32;
    2: second_kind string:256;
};

Python

import fidl.example_library

x = fidl.example_library.ExampleUnion.first_kind_variant(123)
y = fidl.example_library.ExampleUnion()
y.second_kind = "hello"
print(x)
print(y)

這個 Python 程式碼會輸出下列輸出內容:

<'example.library/ExampleUnion' object(first_kind=123)>
<'example.library/ExampleUnion' object(second_kind="hello")>