本頁將舉例說明各種 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")>