内省到底是什么意思?对程序员有什么用?有人可以用外行的术语解释吗?
内省到底是什么意思?对程序员有什么用?有人可以用外行的术语解释吗?
Answers:
自省是一种在运行时找出什么是对象以及它包含什么的方法。在某些语言中,这比其他语言更必要。动态类型化的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网站上有很多。