在Python中打包一个GLib.Variant
PyGObject API允许使用在Python中打包一个GLib.Variant,python,glib,Python,Glib,PyGObject API允许使用unpack()方法将GLib变量转换为Python对象(请参阅) 然而,有没有一种直接的方法可以实现相反的效果 例如,我可以使用Variant构造函数创建任意GLib Variant对象: >>> myglibvariant = GLib.Variant("a{sv}", { 'test': GLib.Variant('s', 'value')}) 并使用unpack()函数一步创建Python对象: >>&
unpack()
方法将GLib变量转换为Python对象(请参阅)
然而,有没有一种直接的方法可以实现相反的效果
例如,我可以使用Variant构造函数创建任意GLib Variant对象:
>>> myglibvariant = GLib.Variant("a{sv}", { 'test': GLib.Variant('s', 'value')})
并使用unpack()
函数一步创建Python对象:
>>> myglibvariant.unpack()
{'test': 'value'}
然而,有没有一种方法可以一步完成相反的操作?例如
>>> myglibvariant = GLib.Variant.pack({'test': 'value'})
否,因为您必须指定类型。(在
{'test':'value'}
示例中,pack函数必须猜测类型是a{ss}
还是a{sv}
,或者可能是{ss}
还是{sv}
还有。很好的一点,类型的模糊性使得猜测类型是不可能的。但是,如果给定了类型,它应该是可能的,不是吗?例如,GLib.Variant.pack(“a{sv},{test':'value'})
当试图使用上述示例(GLib.Variant(“a”)时,该函数就是GLib.Variant
构造函数,否?否{sv},{'test':'value'})
)它失败了TypeError:argument value:Expected GLib.Variant,但是得到了str
。我认为它可能很聪明,只需将'value'
变成一个变量。似乎解包()
则相反,它将变量转换为字符串……如果它自动将'value'
包装为变量,它仍然不知道该变量的类型;它可能是's'
,'o'
,或'g'
。