考慮你有兩個python文件,如下所述。假設一個是通用包(class2
),另一個包含特定的覆蓋並作爲可執行文件(class1
)。python命名空間:__main __。Class不是isinstance of package.Class
class1.py:
#!/usr/bin/python
class Test(object):
pass
class Verificator():
def check(self, myObject):
if not isinstance(myObject, Test):
print "%s is no instance of %s" % (type(myObject),Test)
else:
print "OK!"
if __name__ == '__main__':
from class2 import getTest
v = Verificator()
t = Test()
v.check(t)
s = getTest()
v.check(s)
class2.py:
from class1 import Test
def getTest():
return Test()
什麼情況是,首先檢查是確定的,其中第二失敗。原因是t
是__main__.Test
而s
是class1.Test
和v.check()
檢查__main__.Test
,但在一天結束時它是同一班,對吧?
有沒有辦法寫v.check()
這樣它也接受class1.Test
對象或者其他任何方式來解決這個問題?
我會使用'type(myObject)'代替。它歸結爲同樣的事情,但使用官方的API,而不是直接進入hook屬性。 – 2013-03-01 14:36:52
+1,我會編輯我的答案,使這一點更加突出。 – 2013-03-01 14:37:39
檢查'isinstance(type(myObject),type(Test))'只測試'myObject'的類型是由'Test'的元類創建的。對於由默認元類創建的任何兩種新式類都是如此,幾乎可以肯定不是OP要求的。 – user4815162342 2013-03-01 14:46:45