【发布时间】:2021-03-20 22:10:18
【问题描述】:
我有一个 Employee 基类和一个 Manager 子类。子类接受一个 Employee obj 并将其转换为 Manager。
下面的代码可以正常工作,但是我正在尝试确定如何使用数据类创建相同的代码。
class Employee:
def __init__(self, id: int, name: str):
self.id = id
self.name = name
class Manager(Employee):
def __init__(self, employee: Employee, region: str):
super().__init__(**vars(employee))
self.region = region
e1 = Employee(1, 'Bob')
e2 = Employee(2, 'Sally')
# Sally gets promoted to manager of southwest region
e2 = Manager(e2, 'southwest')
这是我目前所拥有的,我不确定如何传递所有必需的参数。
@dataclass
class Employee:
id: int
name: str
@dataclass
class Manager(Employee):
region: str
def __new__(cls, employee: Employee, region: str):
obj = object.__new__(cls)
super().__init__(obj, **vars(employee))
return obj
e2 = Employee(2, 'Sally')
>>> Manager(e2, region='southwest')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __init__() missing 1 required positional argument: 'name'
【问题讨论】: