内省如何有用?

Chr*_* D. 12 python introspection

我一直在用PHP编程,我正在尝试切换到python.我熟悉PHP,我从来不需要像内省一样使用内省/内省.代码内省有什么用处,在什么情况下我会发现它是不可或缺的?

这是我发现它有用的唯一方法:从我在'Dive into Python'中看到的例子中,内省基本上意味着你可以列出一个对象的所有函数和属性.对我而言,内省似乎只是作为对象的"用户手册".它允许您从python shell查看对象及其功能.

我只是不明白为什么或在什么情况下你会采取任意对象,反思它,并做一些有用的事情.

Sen*_*ran 12

假设您被赋予了一个自定义对象,并且您想知道该对象是否具有某些属性或具有某种特定方法,那么hasattr可以使用内省函数来查找该对象.

也就像已经说明的DiveintoPython书一样,假设您正在构建具有自动完成功能的GUI编辑器,您希望获得在运行时可调用的对象的公共方法,那么您可以使用类似于getattr每个的内省方法获取方法dir并检查是否是callable,然后将其显示在您的自动完成列表中.

  • “鸭子打字”的概念在这里是相关的。如果一个对象有一个 write() 方法,Python 会很乐意让你在尝试写入文件的任何地方使用它——无论它是否派生自 file 类。(这与其他一些语言非常不同!)因此,如果您要写入文件,您可以尝试一下,看看是否出现异常,或者您可以检查它是否有 `write( )` 方法首先使用 `hasattr()`。事实上,通常的 Python 习惯是尝试并捕获异常,但在某些情况下,“三思而后行”也很有用。 (2认同)