假设:
class A:
pass
class B(A):
pass
isinstance(B(), A)
将返回True。
BUT
class MyModel(db.Model):
pass
isinstance(MyModel(), db.Model)
返回False
(肯定True
?)。
我错过了什么?
修改 好的,最简单的测试失败了 - 创建了一个空白的GAE项目。在main.py里面我定义了:
from google.appengine.ext import db
class MyModel(db.Model):
detail = db.StringProperty()
然后我创建了一个包含以下内容的测试文件(test_ami.py):
import unittest
from main import MyModel
from google.appengine.ext import db
class TestAmI(unittest.TestCase):
def test_whatami(self):
m = MyModel()
self.assertEquals(True, isinstance(m, db.Model));
self.assertEquals(True, isinstance(MyModel(), db.Model));
在命令行上:nosetests --with-gae导致:
在test_whatami文件“test_ami.py”,第8行,self.assertEquals(True,isinstance(m,db.Model))AssertionError:True!= False
第8行是:self.assertEquals(True,isinstance(m,db.Model));
答案 0 :(得分:3)
isinstance(B(),A)将返回True。
这似乎不太可能,因为在你的班级定义中,B不会扩展A。
isinstance(MyModel(),db.Model) 返回False(肯定是真的吗?)。
在shell.appspot.com上测试它,它会按预期返回True。