我有一个类,它有一个整数值的参数列表。 我必须实现customlshift方法,该方法将添加到列表中(我必须为我的用例重写lshift方法)。这是一种自定义的lshift方法,因此它不包含任何与位数组有关的内容,而只处理列表中的整数(将其添加到列表中),并接收参数元素。我应该在不导入其他python类的情况下完成这项工作。我还为这个功能定义了测试,所以您可以看到结果应该是什么样子(我已经为add、len和iter实现了自定义方法,但我认为这不相关)
class CustomShift:
def __init__(self, iterator=None):
self.iterator = iterator
if (self.iterator):
self.iterator = list(dict.fromkeys(self.iterator))
def __lshift__(self, element):
"""Add an element to the list.
>>> shiftInstance = CustomShift()
>>> _ = shiftInstance << 4
>>> sorted(shiftInstance << 5 << 6 << 4)
[4, 5, 6]
"""
if self.iterator is None:
self.iterator = []
if element:
self.iterator.append(element)
if __name__ == "__main__":
import doctest
from pprint import pprint
doctest.testmod()
前两个测试通过,但第三个测试失败
TypeError: unsupported operand type(s) for <<: 'NoneType' and 'int'
不知道我做错了什么,任何暗示都将不胜感激。 提前谢谢
首先,
__lshift__
需要返回一个值——即使它改变了它正在处理的实例。为了使链接按您期望的方式工作,它必须返回自身。由于第一个<<
操作不返回任何内容,因此任何后续操作都将导致您注意到的TypeError
异常第二,
__lshift__
方法有一个逻辑错误-只有当iterator
参数是None
时才追加元素。因此,在您想要的最普遍的用例中,实际上不会发生任何事情最后,在您的测试用例中,您希望对该对象调用sort,这意味着该对象需要提供某种迭代器(通过
__iter__
),否则它将因TypeError: 'CustomShift' object is not iterable
而失败。把这些放在一起,你的课看起来是这样的:但是,测试仍然会失败,因为按照它的结构,
shiftInstance
已经附加了一个4
,它被分配给了_
然而,这应该把你推向一个方向,你可能想从你所得到的出发
相关问题 更多 >
编程相关推荐