我在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]))
也不等于。
所以任何人都可以提供帮助吗?
答案 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__)