Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
由于导入机制(python/django),isinstance()和type()等效失败_Python_Django_Types_Import_Isinstance - Fatal编程技术网

由于导入机制(python/django),isinstance()和type()等效失败

由于导入机制(python/django),isinstance()和type()等效失败,python,django,types,import,isinstance,Python,Django,Types,Import,Isinstance,在Django项目中,我在视图中导入一个表单,如下所示 #views.py from forms import SomeForm 然后在一个测试文件中 #form_test.py from app.forms import SomeForm . . . self.assertTrue(isinstance(response.context['form'], SomeForm)) 为什么iInstance不起作用 如果我检查两个对象的type()输出,我会得到以下结果: 回应.背景表格

在Django项目中,我在视图中导入一个表单,如下所示

#views.py
from forms import SomeForm
然后在一个测试文件中

#form_test.py
from app.forms import SomeForm    
.
.
.
self.assertTrue(isinstance(response.context['form'], SomeForm))
为什么iInstance不起作用

如果我检查两个对象的type()输出,我会得到以下结果:

回应.背景表格: 预期形式:

我可以通过使views.py中的导入机制与表单_test.py中的导入机制匹配来解决这个问题,但这似乎是错误的方法

供参考,文件结构如下:

  • 场地/
    • manage.py
    • 应用程序/
      • forms.py
      • views.py
      • 测验/
        • form_test.py

isinstance
也比较模块位置,
响应。上下文['form']
class'模块是
表单
其中某个表单模块是
应用程序。表单
您可以通过分别检查
\uu class\uuuuuuuuuuuuuuuuu模块
\uuuuuuuuuuuu模块
来检查这一点

要使iInstance正常工作,您可以:

  • 修复views.py中的导入(推荐)
  • 在form_testse.py中更改sys.path,以便能够从forms import SomeForm导入表单
  • 试一试

一种可能的破解方法是检查类型的
\uuuu name\uuuu
属性,尽管除非您以正确的方式修复它,否则可能会遇到其他问题

def sharetypename(obj1, obj2):
    if isinstance(obj1, type):
        c1 = obj1.__name__
    else:
        c1 = type(obj1).__name__

    if isinstance(obj2, type):
        c2 = obj2.__name__
    else:
        c2 = type(obj2).__name__

    return c1 == c2