类的前向声明在python是坏的设计?



我遇到过一个类似示例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[]打字)

最新更新