Nis*_*wal 10 gtk application-development gobject
内省究竟是什么意思?它对程序员有什么用?有人可以用通俗的语言解释一下吗?
Oli*_*Oli 14
自省是一种在运行时找出对象是什么以及它包含什么的方法。在某些语言中,这比其他语言更必要。Python 是动态类型的(也就是说,对象可以在运行时获得属性和方法)使用自省来找出对象的当前状态。
这是一个非常简单的 Python 示例,您从一个类开始并添加一个新属性,然后使用自省监视对象实例上可用的属性。
>>> class MyObject:
... variable = False
>>> instance = MyObject()
>>> dir(instance)
['__doc__', '__module__', 'variable']
>>> instance.newvariable = "Kittens"
>>> dir(instance)
['__doc__', '__module__', 'newvariable', 'variable']
Run Code Online (Sandbox Code Playgroud)
因此,在动态系统中,您可以使用 Python 之类的东西hasattr
来判断一个对象是否能够执行您尝试使用它执行的操作。即使您不在运行时使用它,内省对于调试也非常有用。
现在到 GObjects 和基于 GObject 的库。它们在 C 中,在 C 中你不会得到所有这些可爱的蓬松托管代码的废话,你得到了性能。这意味着没有内置的内省,这意味着维护外部绑定更加困难。
绑定是不同语言的事物之间的 API,允许它们一起工作。为了让它工作,你需要一个通用的 API,在这种情况下,API 是 GObject。但是要使其正常工作,调用者绑定必须知道它可以使用什么。在 GObject Introspection 之前,这必须硬编码到绑定中,这意味着在每组绑定上维护一个手写列表。
GObject Introspection 本质上提供了一个扫描器,它可以搜索您正在使用的 GObject 的当前源,并为您提供 XML 绑定信息。然后由绑定处理,您最终会得到一个始终有效的 API。
我当然没有在这里涵盖所有内容,但我试图让您了解这两个主题(内省以及 GObjects 为什么需要它)。如果您想了解更多信息,Gnome 网站上有很多内容。
归档时间: |
|
查看次数: |
3375 次 |
最近记录: |