您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python namespace:__ main __.类不是package.Class的实例

5b51 2022/1/14 8:20:46 python 字数 3445 阅读 431 来源 www.jb51.cc/python

考虑你有两个如下定义的python文件.假设一个是通用包(class2),另一个包含特定的覆盖并用作可执行文件(class1).class1.py:#!/usr/bin/python class Test(object): pass class Verificator(): def check(self, myObject):

概述

考虑你有两个如下定义的python文件.假设一个是通用包(class2),另一个包含特定的覆盖并用作可执行文件(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()

会发生的事情是第一次检查没问题,第二次检查失败.原因是t是__main __.测试而s是class1.Test和v.check()检查__main __.测试,但是在一天结束时它是同一个类,对吧?

有没有办法写v.check(),以便它也接受class1.Test对象,或任何其他方式来解决这个问题?

几乎做任何事都会打开一堆蠕虫.虽然你可以通过将isinstance切换到type(myObject).__ name__ == …来解决当前问题,但事实仍然是你的Python进程包含两个Test类,其中只有一个.其他无法区分的类彼此无关,并且彼此失败的子类测试.这实际上保证了难以诊断的错误.

编辑
另一种选择是在执行main时从class1显式导入类,如答案中所示.建议更进一步,确保类没有以double形式定义.例如,您可以将if __name__ ==’__ main__’块移动到文件的开头,并以sys.exit(0)结束:

if __name__ == '__main__':
    import class1,class2
    ... use only the public API with module prefixes ...
    sys.exit(0)

# the rest of the module follows here

总结

以上是编程之家为你收集整理的python namespace:__ main __.类不是package.Class的实例全部内容,希望文章能够帮你解决python namespace:__ main __.类不是package.Class的实例所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶