gpt4 book ai didi

overloading - Cython 过载特殊方法?

转载 作者:行者123 更新时间:2023-12-04 06:17:59 31 4
gpt4 key购买 nike

是否有可能过载 __cinit____add__ ?
像这样的东西:

cdef class Vector(Base):
cdef double x, y, z

def __cinit__(self, double all):
self.x = self.y = self.z = all

def __cinit__(self, double x, double y, double z):
self.x = x
self.y = y
self.z = z

def __str__(self):
return "Vector(%s, %s, %s)" % (self.x, self.y, self.z)

def __add__(self, Vector other):
return Vector(
self.x + other.x,
self.y + other.y,
self.z + other.z,
)

def __add__(self, object other):
other = <double>other
return Vector(
self.x + other.x,
self.y + other.y,
self.z + other.z,
)

调用 Vector(0) + Vector(2, 4, 7)告诉我这里需要一个浮点数,所以看起来像 __add__(self, Vector other)不被识别为重载方法。

这是因为特殊方法不应该定义为 cdef并且只有 cdef -fed 函数可以重载?

最佳答案

我认为 cython 不支持特殊函数的运算符重载。

最好的办法是手动创建类型检查逻辑并转换 python 对象
因此。

def __add__(self, other):
if type(other) is float:
return self.__add__(<double> other)
elif isinstance(other,Vector):
return self.__add__(<Vector> other)
...

关于overloading - Cython 过载特殊方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6989301/

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