需要查找给定变量是实例还是类



我有接受变量的方法 - change_obj .它可以是一个函数,也可以是一个 django 实例。我尝试使用以下语句找出它是一个函数还是一个 django 实例。

obj_type = type(change_obj).__name__ #'function' or 'instance'

obj_type Topo.在调试时发现

(Pdb) type(change_obj)
<class 'applications.topo.models.Topo'>

我期待

<type 'instance'>

有趣的dir(change_obj)dir(type(change_obj))具有非常相似的输出。我在python提示符下尝试了以下方法,并得到了以下不同的行为

>>> class Topo:
...    id = 123
...    name = 'T'
...
>>> t = Topo()
>>> type(t)
<type 'instance'>

要求 - 给定一个变量需要找出它是实例还是方法。堆栈 - Py 2.6.8 和 Django 1.3.5

shell 中的示例类Topo不是很相关。这是一个旧式类,因为它不子类object

如果将Topo模型导入 shell,将获得与 pdb 中相同的结果。

>>> from applications.topo.models import Topo
>>> t = Topo()
>>> type(t)
<class 'applications.topo.models.Topo'>

如果你想检查一个对象是否是 django 模型实例,我会使用 is_instance .

from django.db import models
t = Topo()
is_model = isinstance(t, models.model)

最新更新