**已关闭。**此问题需要debugging details。它目前不接受回答。
编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答这个问题。
8天前关闭
Improve this question
嗨
我有一些代码在我的CI失败(本地运行不会失败)。问题是类示例未通过isinstance()
检查。
编码:
文件:main.py
class MyController(SuperController):
# Overrides default definition of get_variables_context()
from my_options import get_variables_context
文件:my_options.py
...
def get_variables_context(self: SuperController, **kwargs):
from main import MyController
self: MyController
print(f"type(self) is {type(self)} (it {'IS' if (isinstance(self, MyController)) else 'IS NOT'} a subclass of MyController)")
_super = super(MyController, self).get_variables_context(**kwargs) or dict()
_super.update({ 'some_field': 'some value' })
return _super
得到输出和错误:
type(self) is <class '__main__.MyController'> (it IS NOT a subclass of MyController)
Traceback (most recent call last):
File "main.py", line 24, in <module>
MyController.main(**params)
File "/tmp/example/flow.py", line 391, in main
_tests_suite, _, _ = self.prepare()
File "/tmp/example/flow.py", line 359, in prepare
context['variables_context'] = self.get_variables_context(**context)
File "/tmp/example/my_options.py", line 81, in get_variables_context
_super = super(SomeController, self).get_variables_context(**kwargs) or dict()
TypeError: super(type, obj): obj must be an instance or subtype of type
1条答案
按热度按时间unftdfkk1#
我在调查根本原因的同时找到了解决办法。
在本地运行中,...
我实际上调用了python unittest,它调用了
main.py
,然后创建了一个类MyController
,然后调用了my_options.py
,这个类被添加到加载的模块'main'
中。然后,MyController.get_variables_context
请求已经加载的模块'main'
,然后请求该模块中的类MyController
,因此返回相同类型的示例,类型检查成功。在CI运行中,.
我直接用参数
"test"
调用main.py
(它应该创建一个控制器,并通过unittest运行所有测试),所以类MyController
在模块__main__
中创建。MyController.get_variables_context
仍然要求main.py
中的MyController
类,但是模块'main'
没有在这里加载,所以python加载它,创建 new 类MyController
,然后返回它。所以,基本上答案是...
将
MyController
从main.py
移动到另一个文件,即controller.py