gpt4 book ai didi

python - 如何在 python 中覆盖 __mul__ 函数

转载 作者:行者123 更新时间:2023-12-04 16:29:57 25 4
gpt4 key购买 nike

<分区>

我用python写了一个这样的类

class Vector(object):
def __init__(self, coordinates):
try:
if not coordinates:
raise ValueError
self.coordinates = tuple(coordinates)
self.dimension = len(coordinates)

except ValueError:
raise ValueError('The coordinates must be nonempty')

except TypeError:
raise TypeError('The coordinates must be an iterable')

def __add__(self,v):
v1 = np.array(self.coordinates)
v2 = np.array(v.coordinates)
result = v1 + v2
return result.tolist()

def __sub__(self, other):
v1 = np.array(self.coordinates)
v2 = np.array(other.coordinates)
result = v1 - v2
return result.tolist()

def __mul__(self, other):
return other * np.array(self.coordinates)

def multiply(self,other):
v = Decimal(str(other)) * np.array(self.coordinates)
return v

def __str__(self):
return 'Vector: {}'.format(self.coordinates)


def __eq__(self, v):
return self.coordinates == v.coordinates

我想覆盖操作*,所以我可以实现这样的功能:

3*Vector([1,2,3])=Vector([3,6,9])

所以我尝试了这样的代码:

    def __mul__(self, other):
return other * np.array(self.coordinates)

然而,我很失望地发现这个功能只在以下情况下有效

Vector([1,2,3])*3

如果我写:

3*Vector([1,2,3])

它说:

TypeError: unsupported operand type(s) for *: 'int' and 'Vector'

如何获得同时适用于 3*Vector([1,2,3])Vector([1,2,3])*3 ?

非常感谢。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com