打印包含用户定义对象的列表将返回地址,并在python中实现复数的根

打印包含用户定义对象的列表将返回地址,并在python中实现复数的根,python,python-3.x,oop,Python,Python 3.x,Oop,作为理解python的一部分,我正在尝试实现复数作为理解类的一部分。我试图实现pow魔术方法,返回一组有理幂的复数和整数幂的唯一复数 我所尝试的是实现积分权力及其理性权力 def\uuuu init\uuuu(self,real=0,imag=0): 真实的 self.imag=imag def参数(自身): 返回atan2(self.imag、self.real) def_____;abs____;u__;(自): 返回sqrt(self.real**2+self.imag**2) 定义(自我

作为理解python的一部分,我正在尝试实现复数作为理解类的一部分。我试图实现pow魔术方法,返回一组有理幂的复数和整数幂的唯一复数

我所尝试的是实现积分权力及其理性权力

def\uuuu init\uuuu(self,real=0,imag=0):
真实的
self.imag=imag
def参数(自身):
返回atan2(self.imag、self.real)
def_____;abs____;u__;(自):
返回sqrt(self.real**2+self.imag**2)
定义(自我):
如果self.imag==0:
返回f'{self.real}'
如果self.real==0:
返回f'{self.imag}i'
符号='+'如果self.imag>0,则为'-'
返回f'{self.real}{sign}{abs(self.imag)}i'
定义功率(自我,b):
如果isinstance(b,int):
如果b==0:
返回1
r=abs(自身)**b
t=self.arg()**b
self.real=r*cos(t)
self.imag=r*sin(t)
回归自我
其他:
根=列表()
c=分数(b)。极限值\分母()
c、 d=c.分子,c.分母
tem=自身**c
r=abs(tem)**(1/d)
t=tem.arg()
对于范围(d)中的i:
tem.real=r*cos((t+2*pi*i)/d)
tem.imag=r*sin((t+2*pi*i)/d)
根追加(tem)
回归根
我所期望的是得到语句的单位立方根

a=complex(1,0)
print(a**(1/3))
但我得到的是列表中对象的地址

[<__main__.complex object at 0x02FCEBF0>, <__main__.complex object at 0x02FCEBF0>, <__main__.complex object at 0x02FCEBF0>]
我想了解的是,如何让列表条目具有复杂类型(我将其作为我的类),并成功地打印它们
为什么我得到了一个不正确的答案。

您需要在您的
复杂类中实现
\uu repr\uu()
。虽然在转换为字符串时专门使用
str()
,但在打印对象的大多数其他情况下使用
repr()
。它可以简单到

def __repr__(self):
    return str(self)
这将使repr看起来与字符串相同。或者,您可能希望在
repr
中更明确地说明这是一个复杂的数字,而不仅仅是打印它,在这种情况下,您可以这样做

def __repr__(self):
    return f"complex({str(self)})"

或者类似的东西。如何处理它取决于您。

为了实现它的价值,Python内置了一个复数实现:
a=1+0j;print(a**(1/3))
@KarlKnechtel我知道它是,但我尝试自己实现它只是为了了解python。
def __repr__(self):
    return f"complex({str(self)})"