小ᶻ☡꙳ᵃⁱᵍᶜ꙳ 2024-09-06 19:15 采纳率: 100%
浏览 7
已结题

Python如何自定义类实现列表功能并输出日志?

如何实现一个自定义的 Python 类,使其可以像列表一样支持索引访问、切片操作,以及迭代,但还具有额外的功能,比如在获取或设置值时输出日志信息?

要求:

  1. 创建一个自定义类 CustomList,该类的实例应当像 Python 的列表一样支持以下功能:

    • 通过索引访问元素,例如 my_list[0]
    • 支持切片操作,例如 my_list[1:4]
    • 能够进行迭代,例如 for item in my_list
  2. 当通过索引获取或设置值时,程序需要输出操作日志,例如:

    • 获取时打印 Accessing index 0, value is 5
    • 设置时打印 Setting index 1 to value 10
  3. 初始化该类时,允许传入一个可迭代对象来作为初始化数据。

示例:

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)
  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-06 19:39
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    要实现这样的自定义类 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 列表一样使用,并在执行操作时记录日志。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月14日
  • 已采纳回答 9月6日
  • 创建了问题 9月6日