本页面提供了不同 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 异常,列出缺少的参数。
表类型
这些类型与结构体类型相同,但没有严格的构造函数
要求。未提供给构造函数的任何字段都将设置为 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")>