📅  最后修改于: 2023-12-03 15:04:36.507000             🧑  作者: Mango
在Python 3.7中,新增了一个名为"数据类"(dataclasses)的装饰器,用于更方便地定义类。本文主要介绍如何在数据类中使用继承。
先简单回顾一下数据类的基本用法。数据类可以帮我们自动实现如下内容:
示例代码如下:
from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
address: str = '' # address 属性有默认值
p = Person('Tom', 18)
print(p) # 输出: Person(name='Tom', age=18, address='')
在上述示例中,我们定义了一个Person类。现在,在Person的基础上,我们想定义一个Student类,可以直接使用继承来完成:
from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
address: str = ''
@dataclass
class Student(Person):
school: str
grade: int = 1
s = Student('Alice', 16, 'Beijing', 'High School', 10)
print(s) # 输出: Student(name='Alice', age=16, address='Beijing', school='High School', grade=10)
在这个例子中,我们定义了一个Student类,它继承了Person类。因此,Student类包含了Person类的属性(name, age, address)和方法(repr)。在定义Student类时,我们新增了两个属性(school, grade), 它们分别有默认值 "High School" 和 1。
有时候我们可能希望在子类中重写父类的某个属性或者方法。这也很容易实现:
from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
address: str = ''
def __repr__(self):
return f"Person(name='{self.name}', age={self.age})"
@dataclass
class Student(Person):
school: str
grade: int = 1
def __repr__(self):
return f"Student(name='{self.name}', age={self.age}, school='{self.school}')"
s = Student('Alice', 16, 'Beijing', 'High School', 10)
print(s) # 输出: Student(name='Alice', age=16, school='Beijing')
在这个例子中,我们重写了Person类中的 repr 方法和Student类中的 repr 方法,分别输出个性化的字符串表示。
综上,数据类提供了方便的方式定义类,而使用继承可以简化类的定义和代码的编写。掌握数据类和继承的使用,可以更快地实现Python程序功能。