我有接受变量的方法 - 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)