期望类型为'Type',而实际得到的是'Type [Type]'。

4

我的班级有一个项目,我们需要构建一个数据库。我一直遇到一个错误,Python 询问期望与我给出的相同类型的类型(见图)。

它说:Expected type 'TableEntry', got 'Type[TableEntry]' instead

TableEntry 是一个数据类实例(根据我的任务)。我只调用它来创建 newTable = Table(id, TableEntry),其中 Table 是另一个具有 id 和类型为 TableEntry* 的 dataclass。

*我需要按这种格式完成作业,仅询问语法,不涉及如何进行格式化。


3
你需要向我们展示实际导致问题的代码 - 足够让我们知道你实际在做什么。最好提供足够的代码,以便我们可以在本地运行代码来重现问题。 - Karl Knechtel
你需要包含你的代码以确保,但看起来你可能正在传递类TableEntry而不是TableEntry的实例。如果你包含你的代码,我们可能能够提供帮助。 - PirateNinjas
3个回答

10
当你看到这样的错误时:

期望类型为 'TableEntry',实际上得到了 'Type[TableEntry]'

通常意味着在你的代码中,你使用了TableEntry(类型名称),而不是TableEntry()(构造该类型对象的表达式)。

0
如果您的格式化程序了解Sphinx类型的docstring(PEP 257),那么如果您有以下代码:
newTable = Table(TableEntry)

然后你需要像这样的文档字符串

class TableEntry:
    def __init__(self):
        pass

class Table:
    def __init__(self, table_entry):
        """Descrption.
        
        :param table_entry:
        :type table_entry: type[TableEntry]
        """
        pass     

0
问题出现的原因是您传递了一个TypeTableEntry),而期望的是该类的一个InstanceTableEntry())。请注意后者中的括号。
我已经用一个基本演示程序重现了这个错误:
from dataclasses import dataclass


@dataclass
class TableEntry:
    name: str
    value: int


@dataclass
class Table:
    id: int
    TableEntry: TableEntry


id = 3
newTable = Table(id, TableEntry)

在这里,您传递的是Type TableEntry;而不是TableEntry的实例。

解决问题的方法:

1- 您可以直接创建TableEntry实例:

newTable = Table(id, TableEntry('daxti', 23))

或者

2- 您可以创建一个实例,然后将其传递给 Table 对象:

newTableEntry = TableEntry("daxti", 23)
newTable = Table(id, newTableEntry)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接