Python isinstance(var,Type)总是返回False

时间:2015-06-02 09:28:41

标签: python django

我在Python3中使用Django。 在Model:

中定义了一个类
class PeopleAround(models.Model):
    aaa_Id = models.ForeignKey(Board)
    bbb = models.CharField(max_length=40)
    ccc_Id = models.CharField(max_length=20)
    ddd_Id = models.CharField(max_length=20)

在一个视图中,我通过以下方式成功检索了一些数据:

peopleAroundInDb = PeopleAround.objects.filter(aaa_Id=0).all()

当进行测试时,让我感到惊讶的是下面的表达式总是返回False:

isinstance(peopleAroundInDb[0], models.PeopleAround.__class__)

并且还测试了相等:

id(PeopleAround.__class__) and id(type(peopleAroundInDb[0]))

也不等于。

所以任何人都可以提供帮助吗?

1 个答案:

答案 0 :(得分:4)

不要使用__class__ - 因为这会返回一个类型对象。

这样做:

isinstance(peopleAroundInDb[0], models.PeopleAround)

示例:

>>> isinstance('text', str.__class__)
False
>>> isinstance('text', str)
True

Python不需要比较类型对象,它想要与类本身进行比较。

编辑:

这在技术上有效:

>>> class test:
...     def blah(self, thing):
...         print(isinstance(thing, self.__class__))
...         print(isinstance(thing, test))
...
>>> a = test()
>>> b = test()
>>> a.blah(b)
True
True

但我会说isinstance(thing, test)超过isinstance(thing, self.__class__)

更明确,因此更好一点