以下回复参考:皆我百晓生、券券喵儿等免费微信小程序作答:
要实现这样的自定义类 CustomList,你可以通过继承 Python 的内置列表类 list 并重写相关方法来实现。同时,通过在相关方法中插入日志记录语句来输出操作日志。下面是一个实现的示例:
class CustomList(list):
def __init__(self, iterable=[]):
super().__init__(iterable) # 初始化时调用父类的构造函数
self._log_messages = [] # 用于存储日志信息的列表
def __getitem__(self, index):
item = super().__getitem__(index) # 调用父类的 __getitem__ 方法获取元素
self._log_messages.append(f"Accessing index {index}, value is {item}") # 记录日志
return item
def __setitem__(self, index, value):
super().__setitem__(index, value) # 调用父类的 __setitem__ 方法设置元素
self._log_messages.append(f"Setting index {index} to value {value}") # 记录日志
def __iter__(self):
return super().__iter__() # 返回自定义类的迭代器对象,用于迭代列表中的元素
def get_log_messages(self):
"""获取操作日志"""
return self._log_messages
# 使用示例:
my_list = CustomList([1, 2, 3, 4])
print(my_list[0]) # 输出:Accessing index 0, value is 1
my_list[1] = 10 # 输出:Setting index 1 to value 10
for value in my_list:
print(value) # 输出列表中的每个元素,不包含日志信息,因为打印的是元素本身而不是迭代器对象
print(my_list.get_log_messages()) # 输出操作日志列表
在这个例子中,CustomList 类继承了 list 类并实现了所需的方法。在 __getitem__ 和 __setitem__ 方法中,我们调用了父类的相应方法以支持索引访问和设置值的功能,并在这些方法中添加日志记录语句来输出操作日志。我们还添加了一个 get_log_messages 方法来允许用户检索日志消息列表。这个示例中的类可以像普通的 Python 列表一样使用,并在执行操作时记录日志。