GAE:为什么子类不是db.Model(parent)的实例?

时间:2010-05-04 15:00:54

标签: google-app-engine

假设:

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));

1 个答案:

答案 0 :(得分:3)

  

isinstance(B(),A)将返回True。

这似乎不太可能,因为在你的班级定义中,B不会扩展A。

  

isinstance(MyModel(),db.Model)   返回False(肯定是真的吗?)。

在shell.appspot.com上测试它,它会按预期返回True。