【发布时间】:2023-04-05 07:29:02
【问题描述】:
我目前正在尝试 Python 3.7 中引入的新数据类结构。我目前坚持尝试对父类进行一些继承。看起来参数的顺序被我当前的方法搞砸了,因此子类中的 bool 参数在其他参数之前传递。这会导致类型错误。
from dataclasses import dataclass
@dataclass
class Parent:
name: str
age: int
ugly: bool = False
def print_name(self):
print(self.name)
def print_age(self):
print(self.age)
def print_id(self):
print(f'The Name is {self.name} and {self.name} is {self.age} year old')
@dataclass
class Child(Parent):
school: str
ugly: bool = True
jack = Parent('jack snr', 32, ugly=True)
jack_son = Child('jack jnr', 12, school = 'havard', ugly=True)
jack.print_id()
jack_son.print_id()
当我运行这段代码时,我得到了这个TypeError
:
TypeError: non-default argument 'school' follows default argument
我该如何解决这个问题?
【问题讨论】:
-
我认为值得注意的是,在 attrs / dataclass 类型的 Python 范式中,组合通常比继承更受欢迎。像这样扩展您的子类的
__init__
模糊地违反了LSP,因为您的各种子类不能互换。需要明确的是,我认为这种方式通常很实用,但如果你没有考虑使用组合:创建一个不继承的Child
数据类,然后有一个child
属性也可能是有意义的Parent
类。
标签:
python
python-3.x
python-3.7
python-dataclasses
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 3.7 数据类中的类继承 - Python技术站