【发布时间】:2021-12-15 15:13:13
【问题描述】:
bookmodel 中有两个数据类,一个继承自另一个:
@dataclass(frozen=True)
class BookOrder:
category: str
name: str
color: str
price: int
volume: int
@dataclass(frozen=True)
class ClientOrder(BookOrder):
client_id: str
然后在另一个.py 文件中,我需要使用BookOrder 初始化一个ClientOrder 实例:
from book_model import BookOrder
# ...
@dataclass
class Client:
id: str
def place_book_order(self, book_order: BookOrder):
# want to init a ClientOrder HERE!!!
由于BookOrder 不可调用,我无法将self.id 传递给它。我想知道是否有一种优雅的方式来实现这一点?
更新
猜猜我想问的是,除了以下方法之外,还有其他方法可以使用BookOrder 初始化ClientOrder 吗?
client_order=ClientOrder(book_order.categry, book_order.name, ..., self.client_id)
【问题讨论】:
-
我可能只是不使用继承,而是创建一个
ClientOrder一个有两个成员的类:一个BookOrder实例和一个client_id。您可以将它们都传递给ClientOrder初始化程序以创建客户订单。 -
您能否详细说明“BookOrder 不可调用”?如果我理解,类,如函数,应该是可调用的。
-
@rv.kvetch 类
BookOrder没有像ClientOrder这样的输入参数,对吗?所以我想我所说的不可调用的意思是我们不能将id/任何其他变量作为参数作为属性添加到BookOrder。 -
是什么阻止您创建像
place_client_order这样可用于创建 ClientOrder 对象的方法? -
@rv.kvetch Idk 但是当我使用这种格式
client_order=ClientOrder(book_order)初始化时,我得到了TypeError: __init__() missing 5 required positional arguments: 'name', 'color', 'price', 'volume', and 'client_id'。这是否意味着我必须通过指定client_order=ClientOrder(book_order.categry, book_order.name, ..., self.client_id)之类的每个属性来初始化它?
标签: python python-3.x inheritance initialization python-dataclasses