我遇到过一个类似示例1的引用问题;
@dataclass
class Book:
book_id:int
book_name:str
book_library: Library #The object where book is stored
@dataclass
class Library:
library_id:int
library_capasity: int
book_list: list[Book]
在上面的例子中,我遇到了库object没有定义,因为它定义在Book之后。类声明。为了克服这个问题,我添加了一个代码块,如例2;
@dataclass
class Library:
pass
class Book:
book_id:int
book_name:str
book_library: Library #The object where book is stored
@dataclass
class Library:
library_id:int
library_capasity: int
book_list: list[Book]
在此之后没有错误。
我的问题如下;
- 我采用了前向声明的方法来克服这个问题。这是一个糟糕的代码设计吗?
- Python是一种解释性语言,并且正在被解释语言导致示例1中发生的此错误?
- 同样的错误在例子1可能发生在Java或c++这是基于编译器的编程语言?
你的问题更像是XY问题,至少在这种情况下。
如果您使用from __future__ import annotations
,则没有错误。
book_library: "Library"
如前所述book_list: Book[]
无效,请使用book_list: list[Book]
代替。
在Python中正确的方法是使用__future__
模块:
from __future__ import annotations
from dataclasses import dataclass
@dataclass
class Book:
book_id:int
book_name:str
book_library: Library #The object where book is stored
@dataclass
class Library:
library_id:int
library_capasity: int
book_list: list[Book]
(也固定Book[]
打字)