019. 实现一个继承自list的自定义列表类

在 Python 中,可以通过继承内置的 list 类来创建一个自定义的列表类。这样可以利用 list 的所有功能,并在此基础上添加新的方法或修改现有方法。以下是一个示例,展示如何实现一个继承自 list 的自定义列表类,并添加一些额外的功能。

示例:自定义列表类

假设我们想创建一个自定义的列表类,名为 CustomList,它继承自 list,并添加以下功能:

  1. 一个方法 add_item,用于向列表中添加一个新元素。
  2. 一个方法 get_length,用于返回列表的长度。
  3. 一个方法 reverse_list,用于反转列表中的元素。
# 定义一个继承自 list 的自定义列表类
class CustomList(list):
    def __init__(self, initial_data=None):
        """
        初始化方法,可以接受一个初始数据列表。
        """
        if initial_data is not None:
            super().__init__(initial_data)  # 调用父类的初始化方法
        else:
            super().__init__()

    def add_item(self, item):
        """
        添加一个新元素到列表中。
        """
        self.append(item)  # 使用父类的 append 方法

    def get_length(self):
        """
        返回列表的长度。
        """
        return len(self)  # 使用父类的 len 方法

    def reverse_list(self):
        """
        反转列表中的元素。
        """
        self.reverse()  # 使用父类的 reverse 方法

# 创建 CustomList 的实例
my_list = CustomList([1, 2, 3])

# 使用自定义方法
my_list.add_item(4)
print("添加元素后:", my_list)  # 输出:[1, 2, 3, 4]

length = my_list.get_length()
print("列表长度:", length)  # 输出:4

my_list.reverse_list()
print("反转后:", my_list)  # 输出:[4, 3, 2, 1]

代码解释

继承 list

  • 使用 class CustomList(list) 定义一个名为 CustomList 的类,继承自 list

初始化方法

  • 定义了 __init__ 方法,接受一个可选的 initial_data 参数。

  • 如果提供了 initial_data,则调用父类的 __init__ 方法初始化列表。

  • 如果没有提供 initial_data,则初始化一个空列表。

自定义方法

  • add_item 方法:使用父类的 append 方法向列表中添加一个新元素。

  • get_length 方法:使用父类的 len 方法返回列表的长度。

  • reverse_list 方法:使用父类的 reverse 方法反转列表中的元素。

创建实例并调用方法

  • 创建 CustomList 的实例 my_list,并传入初始数据 [1, 2, 3]

  • 调用 add_item 方法添加一个新元素 4

  • 调用 get_length 方法获取列表的长度。

  • 调用 reverse_list 方法反转列表中的元素。

扩展:重写父类方法

如果需要修改父类中的某些方法,可以在子类中重写这些方法。例如,重写 __str__ 方法来自定义列表的字符串表示:

class CustomList(list):
    def __init__(self, initial_data=None):
        if initial_data is not None:
            super().__init__(initial_data)
        else:
            super().__init__()

    def add_item(self, item):
        self.append(item)

    def get_length(self):
        return len(self)

    def reverse_list(self):
        self.reverse()

    def __str__(self):
        """
        重写 __str__ 方法来自定义列表的字符串表示。
        """
        return f"CustomList({super().__str__()})"

# 创建 CustomList 的实例
my_list = CustomList([1, 2, 3])

# 使用自定义方法
my_list.add_item(4)
print(my_list)  # 输出:CustomList([1, 2, 3, 4])

注意事项

继承内置类型

  • 继承内置类型(如 list)时,可以直接使用父类的方法和属性。

  • 如果需要修改父类的行为,可以通过重写方法来实现。

调用父类方法

  • 使用 super() 函数调用父类的方法,确保父类的逻辑被正确执行。

扩展功能

  • 可以根据需要添加更多自定义方法或属性,以扩展类的功能。

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)