📜  Python中的数据类 |第 4 组(继承)(1)

📅  最后修改于: 2023-12-03 15:04:36.507000             🧑  作者: Mango

Python中的数据类 | 继承

在Python 3.7中,新增了一个名为"数据类"(dataclasses)的装饰器,用于更方便地定义类。本文主要介绍如何在数据类中使用继承。

基本数据类

先简单回顾一下数据类的基本用法。数据类可以帮我们自动实现如下内容:

  1. 属性声明
  2. 构造函数
  3. repr 方法

示例代码如下:

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程序功能。