019. 实现一个继承自list的自定义列表类
在 Python 中,可以通过继承内置的 list
类来创建一个自定义的列表类。这样可以利用 list
的所有功能,并在此基础上添加新的方法或修改现有方法。以下是一个示例,展示如何实现一个继承自 list
的自定义列表类,并添加一些额外的功能。
示例:自定义列表类
假设我们想创建一个自定义的列表类,名为 CustomList
,它继承自 list
,并添加以下功能:
- 一个方法
add_item
,用于向列表中添加一个新元素。 - 一个方法
get_length
,用于返回列表的长度。 - 一个方法
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)