我试图使用Python函数注释(pep3107)作为PyCharm的类型提示,但是没有成功。这个问题可能与我使用ABCMeta
有关:
import abc
class base(object, metaclass=abc.ABCMeta):
@abc.abstractmethod
def test(self):
pass
class deriv1(base):
def test(self):
return "deriv1"
class deriv2(base):
def test(self):
return "deriv2"
my_list = []
def append_to_list(el: base) -> list(base):
# def append_to_list(el):
# """
# :param el: item to add
# :type: base
# :return: items so far
# :rtype: list[base]
# """
my_list.append(el)
return my_list
append_to_list(deriv1())
a = append_to_list(deriv2())
for o in a:
print(o.test())
此代码不运行。相反,我在def append_to_list
行得到一个TypeError: 'ABCMeta' object is not iterable
。在
当我将alternative函数与docstring类型的提示(上面代码中的注释行)一起使用时,一切都很好。在
这种类型的暗示可以使用注释吗?在
它与
abc
无关,但因为您告诉Python按字面意思计算这是不可能的,因为
base
是不可编辑的。这就是错误信息告诉你的。在您需要将其改为方括号并用引号括起来(因为
^{pr2}$list
类型不可订阅):或使用可订阅的
typing.List
:表示它是一个包含
base
对象的列表。在相关问题 更多 >
编程相关推荐