在Python Django中如何打印对象的内省?该对象的所有公共方法列表(变量和/或函数)?

19 投票
2 回答
28476 浏览
提问于 2025-04-15 18:39

在Python的Django框架中,如何打印出一个对象的内部信息?也就是列出这个对象(变量和/或函数)所有公开的方法?

比如:

def Factotum(models.Model):
  id_ref = models.IntegerField()

  def calculateSeniorityFactor():
    return (1000 - id_ref) * 1000

我想在Django的命令行中运行一个指令,告诉我一个Django模型的所有公开方法。运行上面的指令后,输出的结果会是:

>> introspect Factotoum
--> Variable: id_ref
--> Methods: calculateSeniorityFactor

2 个回答

6

使用 inspect 模块:

import inspect
def introspect(something):
  methods = inspect.getmembers(something, inspect.ismethod)
  others = inspect.getmembers(something, lambda x: not inspect.ismethod(x))
  print 'Variable:',   # ?! what a WEIRD heading you want -- ah well, w/ever
  for name, _ in others: print name,
  print
  print 'Methods:',
  for name, _ in methods: print name,
  print

在普通的 Python 终端中,你不能不加括号直接调用这个功能,你需要使用 introspect(Factotum)(当然,前提是你已经在当前环境中导入了类 Factotum)。而不是像这样 introspect Factotum,中间有空格。如果这样让你感到很烦,你可以考虑使用 IPython

51

其实你可以检查的东西有很多,不止一个。

可以从以下几个方面入手:

>>> help(object)
>>> dir(object)
>>> object.__dict__

另外,看看标准库里的inspect模块也很不错。

这样你就能掌握99%的基础知识了。

撰写回答