2010-05-04 46 views
0

考慮:GAE:爲什麼子類不是db.Model(父)的實例?

class A: 
pass 
class B(A): 
pass 

isinstance(B(), A)將返回true。

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_ami.py」,8號線,在test_whatami self.assertEquals(真,isinstance(男,db.Model))Asse田:真=假

8號線是:自我。 assertEquals(True,isinstance(m,db.Model));

+0

更多細節: 從google.appengine.ext進口分貝 類生(db.Model): ... ,然後在單元測試 進口單元測試 從google.appengine.ext進口分貝 from models.health import健康 class TestHealth(unittest.TestCase): def test_foo(self): h = Health(); print isinstance(Health(),db.Model) print isinstance(h,db.Model) 最後兩行同時打印False – bryanallott 2010-05-05 07:57:33

回答

3

isinstance(B(), A) will return True.

這似乎是不太可能的,因爲在類定義中,B不延長A.

isinstance(MyModel(), db.Model) returns False(surely True?).

測試這對shell.appspot.com,返回true,符合市場預期。

+0

抱歉,編輯錯字。問題依然存在。 – bryanallott 2010-05-05 07:54:36

+0

正如我所說的,在shell.appspot.com上測試這個結果會返回預期的結果,顯然你正在做的與你所展示的例子不同。您應該將自己的代碼減少到能夠再現問題的最簡單的測試用例。 – 2010-05-05 09:17:31

+0

最簡單的測試失敗..是的,偉大的想法 - 做到了。仍然失敗。 – bryanallott 2010-05-06 05:53:35

相關問題