按类型名称获取在 doctest 中定义的类型对象
Get type object defined inside doctest by type name
我正在尝试对接受模块对象 module
和该模块内类型名称为 type_name
的字符串的方法进行文档测试:
def get_type_from_string(module, type_name):
"""
>>> class A: pass
>>> A.__module__
'mymodule'
>>> get_type_from_string(sys.modules['mymodule'], 'A')
<class '__mymodule__.A'> <------ fails
"""
return getattr(module, type_name)
当我尝试使用 getattr
获取类型对象时(实际上,该方法不仅如此),我收到错误消息:
AttributeError: module 'mymodule' has no attribute 'A'
是否可以在文档测试之外定义 A
class 来对这个方法进行文档测试?
由于某种原因,定义的 A class
没有出现在 __dict__
中。也许这是 doctest 本身的问题。作为解决方法,您可以像这样添加它:
sys.modules[A.__module__].A = A
或
sys.modules[A.__module__].__dict__['A'] = A
def get_type_from_string(module, type_name):
"""
>>> import sys
>>> class A: pass
>>> A.__module__
'mymodule'
>>> sys.modules[A.__module__].A = A
>>> get_type_from_string(sys.modules['mymodule'], 'A')
<class 'mymodule.A'>
"""
return getattr(module, type_name)
这就是我调用测试的方式:
if __name__ == "__main__":
# import sys
import doctest
import mymodule
doctest.testmod(mymodule)
我正在尝试对接受模块对象 module
和该模块内类型名称为 type_name
的字符串的方法进行文档测试:
def get_type_from_string(module, type_name):
"""
>>> class A: pass
>>> A.__module__
'mymodule'
>>> get_type_from_string(sys.modules['mymodule'], 'A')
<class '__mymodule__.A'> <------ fails
"""
return getattr(module, type_name)
当我尝试使用 getattr
获取类型对象时(实际上,该方法不仅如此),我收到错误消息:
AttributeError: module 'mymodule' has no attribute 'A'
是否可以在文档测试之外定义 A
class 来对这个方法进行文档测试?
由于某种原因,定义的 A class
没有出现在 __dict__
中。也许这是 doctest 本身的问题。作为解决方法,您可以像这样添加它:
sys.modules[A.__module__].A = A
或
sys.modules[A.__module__].__dict__['A'] = A
def get_type_from_string(module, type_name):
"""
>>> import sys
>>> class A: pass
>>> A.__module__
'mymodule'
>>> sys.modules[A.__module__].A = A
>>> get_type_from_string(sys.modules['mymodule'], 'A')
<class 'mymodule.A'>
"""
return getattr(module, type_name)
这就是我调用测试的方式:
if __name__ == "__main__":
# import sys
import doctest
import mymodule
doctest.testmod(mymodule)