Python 类特殊方法行为\uuuu复杂__
我有一个类定义了Python 类特殊方法行为\uuuu复杂__,python,Python,我有一个类定义了\uuuuu complex\uuuu特殊方法。我的类不是一个标准的数字类型(int、float等),但它的行为类似于一个,因为我为\uuuu add\uuuu、\uu sub\uu等定义了特殊的方法 我希望\uuuuuuuuuuuuuuuuuuuuuuuuu返回我的复数数值对象,而不是python期望的标准复数数值。因此,当我尝试返回我的对象而不是标准的复杂数值时,Python会抛出以下错误 TypeError:不支持*:“复杂”和“”的操作数类型 “MyNumericClas
\uuuuu complex\uuuu
特殊方法。我的类不是一个标准的数字类型(int、float等),但它的行为类似于一个,因为我为\uuuu add\uuuu
、\uu sub\uu
等定义了特殊的方法
我希望\uuuuuuuuuuuuuuuuuuuuuuuuu
返回我的复数数值对象,而不是python期望的标准复数数值。因此,当我尝试返回我的对象而不是标准的复杂数值时,Python会抛出以下错误
TypeError:不支持*:“复杂”和“”的操作数类型
“MyNumericClass”
最好的方法是什么
编辑: 有两种选择:
并翻转乘法操作数
MyNumericClass
实例强制转换为complex
并翻转乘法操作数
MyNumericClass
实例强制转换为complex
在没有看到代码的情况下,很难猜测问题可能是什么。您是否定义了
\uu rmul\uuu()
?完成。请看片段。ThanksI getTypeError:\uuuu complex\uuu在运行代码段后应返回一个复杂对象。也许您是想返回self.\u value
而不是self
?当我替换它时,会打印两行:[0.+0.j0.+0.j0.+0.j]
和[0.+0.j0.+0.j]
。我使用的是Python 2.7.3。如果我返回self.\u值,它只返回属性。我想返回整个对象,所以返回self.\u值不是我想要的。发生该类型错误的原因是\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。我不确定实现我想要的功能的正确方法是什么。我希望我可以使用特殊的方法来保持python友好,但这可能是不可能的?如果不看代码,就很难猜测问题出在哪里。您是否定义了\uu rmul\uuu()
?完成。请看片段。ThanksI getTypeError:\uuuu complex\uuu在运行代码段后应返回一个复杂对象。也许您是想返回self.\u value
而不是self
?当我替换它时,会打印两行:[0.+0.j0.+0.j0.+0.j]
和[0.+0.j0.+0.j]
。我使用的是Python 2.7.3。如果我返回self.\u值,它只返回属性。我想返回整个对象,所以返回self.\u值不是我想要的。发生该类型错误的原因是\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。我不确定实现我想要的功能的正确方法是什么。我希望我可以使用这个特殊的方法来保持python友好,但这可能是不可能的。次要的一点:python没有强制转换(你告诉语言内存中的内容实际上是另一种类型),你可以将它转换成一个全新的对象(这可能会影响内存/性能)你提出的解决办法把我弄糊涂了。我不是在尝试乘法,而是在给定实数的情况下返回一个复数对象。例如,我想将一个真实的对象数组转换为复数,x=mylib.zeros(shape).astype(complex)
,它类似于numpyx=np.zeros(shape).astype(complex)
mylib.zeros创建一个自定义数值对象的零数组,类似于numpy。您能提供一个导致上述类型错误的最小示例吗?小点:python没有强制转换(您告诉语言内存中的内容实际上是另一种类型),您可以将其转换为一个全新的对象(可能会影响内存/性能)。我对您提出的解决方案感到困惑。我不是在尝试乘法,而是在给定实数的情况下返回一个复数对象。例如,我想将一个真实的对象数组转换为复数,x=mylib.zeros(shape).astype(complex)
,它类似于numpyx=np.zeros(shape).astype(complex)
mylib.zeros创建一个自定义数值对象的零数组,与numpy类似。您能提供一个导致上述类型错误的最小示例吗?
# Python builtins
import copy
# Numeric python
import numpy as np
class MyNumericClass (object):
""" My numeric class, with one single attribute """
def __init__(self, value):
self._value = value
def __complex__(self):
""" Return complex value """
# This looks silly, but my actual class has many attributes other
# than this one value.
self._value = complex(self._value)
return self
def zeros(shape):
"""
Create an array of zeros of my numeric class
Keyword arguments:
shape -- Shape of desired array
"""
try:
iter(shape)
except TypeError, te:
shape = [shape]
zero = MyNumericClass(0.)
return fill(shape, zero)
def fill(shape, value):
"""
Fill an array of specified type with a constant value
Keyword arguments:
shape -- Shape of desired array
value -- Object to initialize the array with
"""
try:
iter(shape)
except TypeError, te:
shape = [shape]
result = value
for i in reversed(shape):
result = [copy.deepcopy(result) for j in range(i)]
return np.array(result)
if __name__ == '__main__':
a_cplx = np.zeros(3).astype(complex)
print a_cplx
b_cplx = zeros(3).astype(complex)
print b_cplx