“自省”是什么意思,它与GObject自省有何关系?


Answers:


11

自省是一种在运行时找出什么是对象以及它包含什么的方法。在某些语言中,这比其他语言更必要。动态类型化的Python(也就是说,对象可以在运行时获取属性和方法)使用自省功能来查找对象的当前状态。

这是一个非常简单的Python示例,其中从类开始并添加新属性,然后使用自省功能监视对象实例上可用的属性。

>>> class MyObject:
...   variable = False

>>> instance = MyObject()

>>> dir(instance)
['__doc__', '__module__', 'variable']

>>> instance.newvariable = "Kittens"

>>> dir(instance)
['__doc__', '__module__', 'newvariable', 'variable']

因此,在动态系统中,您可以使用Python之类的方法hasattr来判断对象是否能够执行您要使用该对象进行的操作。即使您在运行时不使用它,自省对于调试也非常有用。


现在介绍GObjects和基于GObject的库。它们在C语言中,而在C语言中,您不会得到所有这些可爱的蓬松托管代码,而是获得了性能。这意味着不存在内置的自省功能,这意味着难以维护外部绑定。

绑定是以不同语言在事物之间进行交互的API。为了使其正常工作,您需要一个通用的API,在这种情况下,该API是GObject。但是,要使此方法有效,调用者绑定必须知道可用的内容。在GObject Introspection之前,必须将其硬编码到绑定中,这意味着在每组绑定上都要维护一个手写列表。

GObject Introspection本质上提供了一个扫描程序,该扫描程序可以搜寻正在使用的GObject的当前源,并为您提供XML绑定信息。然后由绑定处理,您最终将获得一个始终有效的API。

我当然没有在这里介绍所有内容,但是我想向您介绍这两个主题(自省以及GObjects需要它的原因)。如果您想了解更多,Gnome网站上有很多。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.