我定义了两个类.一个Bookshelf类和一个Book类,它们各自定义了自己的方法和类型提示.当我使用python 3.10在VS代码中运行以下代码时,会出现以下错误:

class Bookshelf: 
SyntaxError: Invalid syntax

这是指下面BookShelf类的init.你们谁能发现这个问题?

class Bookshelf:

    def __init__(self, books: list[Book]):
        self.books = books

    def __str__(self) -> str:
        return f"Bookshelf with {len(self.books)}"


class Book:
    def __init__(self, name: str, page_count: int):
        self.name=name
        self.page_count = page_count

推荐答案

它不是SyntaxError,而是NameError,因为在类型提示中使用Book类时,还没有定义它.

1. First solutionBook类的定义移到BookShelf类之前.

2. Second solution是使用字符串而不是book本身:

def __init__(self, books: list["Book"]):

我认为在Python3.11中,他们将允许按原样使用它.类型注释的判断将被推迟:

https://peps.python.org/pep-0563/

3. third solution:如果你现在想要这个,你可以导入:

from __future__ import annotations

那么你的代码就可以工作了.

Python相关问答推荐

如何排除prefecture_related中查询集为空的实例?

合并与拼接并举

如何使用正则表达式修改toml文件中指定字段中的参数值

如何在Python Pandas中填充外部连接后的列中填充DDL值

解决Geopandas和Altair中的正图和投影问题

python的文件. truncate()意外地没有截断'

BeatuifulSoup从欧洲志愿者服务中获取数据和解析:一个从EU-Site收集机会的小铲子

如何在Python中创建仅包含完整天数的月份的列表

在Pandas 中以十六进制显示/打印列?

如何删除剪裁圆的对角线的外部部分

Django REST框架+Django Channel->;[Errno 111]连接调用失败(';127.0.0.1';,6379)

如何使用aiohttp获取图像并直接处理它而不保存它?

Antlr Python错误处理简单的PLSQL

try 理解PyTorch运行错误:try 再次向后遍历图表

元组列表:如果第一个元组元素匹配,则合并两个数据帧列

在POLARS中,如何命名使用GROUP_BY和N_UNIQUE创建的列?

Pandas 多重索引不返回级别和标签

如何根据预定义的模板重新排序YAML键并维护注释?

在Python中使用仿函数作为有状态回调函数

WinError 193%1不是有效的Win32应用程序.AZ二头肌