python将2个对象或对象添加到列表中
我有一个矢量类,它给出了一个带有列表的向量,我需要能够向列表,元组和字符串添加向量或向量。如果它们长度不一样,我需要抛出一个类型错误。输出的一些例子:python将2个对象或对象添加到列表中
Vector([6,8,2])+Vector([4,-3,2])
Vector([10, 5, 4])
>>> Vector([6,8,2])+[4,-3,2]
Vector([10, 5, 4])
>>> (6,8,2)+Vector([4,-3,2])
Vector([10, 5, 4])
>>> v=Vector(["f","b"])
>>> v+=("oo","oo")
>>> v
Vector(['foo', 'boo'])
我需要做一个+函数和一个+ =函数。
的Python方法做我用它来重写+和+ =操作,也是我需要确保我的+操作的对象和序列和反向
要全面落实以任意顺序串联上工作,you need to implement three methods, __add__
, __radd__
and __iadd__
。你根本没有执行__add__
(所以Vector + sequence
不工作,只有sequence + Vector
使用__radd__
)并且拼写错误__iadd__
为__iadd
(所以Vector += anything
不工作)。
哦,我没有注意到这一点。我收到它我加入与radd相同的确切实现,它的工作。 –
@AnatoliySokolov:基本规则是当实例位于运算符的左侧时,调用二元运算符的普通'__xxx__'方法,当它位于右侧时调用__rxxx__',左侧的对象方的'__xxx__'不存在(或返回'NotImplemented'),并且在使用增广赋值操作符时调用__ixxx__。 '__ixxx__'是可选的;对于不可变类型,当__ixxx__缺失时,Python使用'__xxx__'。你可能想看看['collections.abc'接口](https://docs.python.org/3/library/collections.abc.html#module-collections.abc) – ShadowRanger
@AnatoliySokolov:你可能也想要查看[实现算术运算](https://docs.python.org/3/library/numbers.html#implementing-the-arithmetic-operations),了解如何使用基于运算符回退的方法来避免大量重复码;它关注的是数学运算,但是相同的技术适用于序列运算,并且'fractions.Fraction'中给出的例子可以缩短代码量。 – ShadowRanger
你可以用'isinstance'来检查'other'参数的类型,例如'isinstance(other,Vector)' –
我认为'__iadd__'方法是你正在寻找的(+ =案件)。 http://stackoverflow.com/questions/1047021/overriding-in-python-iadd-method –
我让iadd为2个向量工作,我不知道为什么它不适用于向量和序列>>> v = Vector( [ “F”, “b”]) >>> v + =( “OO”, “OO”) 回溯(最近最后调用): 文件 “”,第1行,在 类型错误:不支持的操作数类型为+ =:'实例'和'元组' >>> –