以下に定義されている 2 つの python ファイルがあるとします。1 つは一般的なパッケージ ( class2
) で、もう 1 つは特定のオーバーライドを行い、実行可能ファイルとして機能するとします ( class1
)。
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()
何が起こるかというと、最初のチェックは OK で、2 番目のチェックは失敗します。その理由は、t
isと のチェックですが、結局のところ、同じクラスですよね?__main__.Test
s
class1.Test
v.check()
__main__.Test
v.check()
オブジェクトも受け入れるように書く方法class1.Test
、またはこれを解決する他の方法はありますか?