包含ABCMeta实例的列表的函数注释

2024-04-26 17:31:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用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类型的提示(上面代码中的注释行)一起使用时,一切都很好。在

这种类型的暗示可以使用注释吗?在


Tags: totestself类型basereturndefel
1条回答
网友
1楼 · 发布于 2024-04-26 17:31:14

它与abc无关,但因为您告诉Python按字面意思计算

list(base)

这是不可能的,因为base是不可编辑的。这就是错误信息告诉你的。在

您需要将其改为方括号并用引号括起来(因为list类型不可订阅):

^{pr2}$

或使用可订阅的typing.List

from typing import List

def append_to_list(el: base) -> List[base]:

表示它是一个包含base对象的列表。在

相关问题 更多 >