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

时间:2016-01-13 10:33:35

标签: python django

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

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

obj_typeTopo。在调试时发现

(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'>

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

1 个答案:

答案 0 :(得分:1)

shell中的示例类Topo不是很相关。它是old style class,因为它不是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)