:rtype:
指定这是返回对象的类型。
因此,当我创建对象时obj
在下面的代码片段中,我收到来自 IDE 的警告:cls is not callable
,因为 IDE 期望cls
is object
类型的SomeAbstractClass
, 而且我要SomeAbstractClass
itself.
IDE 是正确的,因为这是默认行为。但是我如何指定我返回的是一个类,而不是类的实例?
指定type
代替SomeAbstractClass
有点帮助,但这不是解决方案,因为没有进一步的内省可用。
def class_selector(data):
"""
:rtype: SomeAbstractClass
:return: Return some class based on given parameters
"""
return get_from.get(data.name)
cls = class_selector(data)
obj = cls(data.more_data)
同时我通过添加解决了这个问题""":type: SomeAbstractClass"""
创建对象后,但这并不能取消警告,这是一个肮脏的解决方案。
顺便说一句,我说的是 Python 2.x。
至于 2020 年,唯一正常工作的解决方案 - 使用 python3 注释:
一般来说,2020 年这是完全可以接受的
附上屏幕截图以演示正确的行为。
基本上,def factory(name) -> type[SomeAbstractClass]:
or def factory(name) -> "type[SomeAbstractClass]":
(对于无法导入名称的情况)工作完全正常。
仍然无法为较旧的 Python 版本找到解决方案(即避免使用注释)。但这并不是 2020 年的交易破坏者
如果有人想复制粘贴来测试替代方法,则代码与文本相同
class SomeAbstractClass:
property_by_class = 1
def __init__(self):
self.property_by_object = 1
def factory(name) -> type[SomeAbstractClass]:
hide_it = dict()
class ActualClassImpl(SomeAbstractClass):
pass
hide_it.__setitem__(name, ActualClassImpl)
return hide_it.__getitem__(name)
if __name__ == '__main__':
a = factory('testclass')
by_class_should_be_ok = a.property_by_class
by_object_should_hint_error = a.property_by_object
just_like_none_existing_property_hints = a.property_by_object_bad
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)