Python,魔法方法:无法理解任务

0 投票
4 回答
60 浏览
提问于 2025-04-14 16:56

我正在学习Python,遇到一个任务,但我有点搞不懂 :)

“mississippi”这个词要怎么传给魔法方法呢?我看到只有整数列表被传给了Counter。

任务描述

你需要在Counter类中重载加法运算符。使用add()这个魔法方法来实现加法的重载。

举个例子,当你写a + b时,a这个对象应该有一个add()方法,它接受b作为第二个参数(self是第一个参数)。

在这个情况下,Counter对象接受一个整数列表作为参数。要进行总结的对象是一个字符串对象。结果应该是一个字符串列表,格式如下:1 test - 列表中的一个对象和字符串之间用空格分开。

默认代码:

from typing import List


class Counter:
    def __init__(self, values: List[int]):
        self.values = values
    # TODO: add your code here

示例

>>> Counter([1, 2, 3]) + "mississippi"

["1 mississippi", "2 mississippi" , "3 mississippi"]

4 个回答

0

这是你的问题:

如何将“mississippi”传递给魔法方法?

问题描述是:

a + b 的情况下,a 对象应该有一个 __add__() 方法,这个方法接受 b 作为第二个参数(self 是第一个参数)

这告诉你,“mississippi”作为 b 参数传递给 __add__ 方法。

0

重写 __add__ 方法时,应该返回自身。

class Counter:
    def __init__(self, values: list[int]):
        self._values = values
        self._list = []
    def __add__(self, txt: str):
        self._list = [f"{v} {txt}" for v in self._values]
        return self
    def __str__(self) -> str:
        return repr(self._list)
        
print(Counter([1,2,3]) + "mississippi")

输出:

['1 mississippi', '2 mississippi', '3 mississippi']
0

在使用 __add__ 函数时,你会遵循一种设计,这种设计允许这个方法在操作时动态地接受第二个操作数。这种方法给你提供了更多的灵活性。

下面是一个标准的实现:

from typing import List

class Counter:
    def __init__(self, values: List[int]):
        self.values = values

    def __add__(self, other: str) -> List[str]:
        # Create a list of strings by combining each number from self.values with the string 'other'
        return [f"{value} {other}" for value in self.values]

# Example usage:
if __name__ == "__main__":
    counter = Counter([1, 2, 3])
    result = counter + "mississippi"
    print(result)

输出结果是: ["1 mississippi", "2 mississippi", "3 mississippi"]

撰写回答