Как часть попытки понять python, я пытаюсь реализовать комплексные числа как часть понимания классов.Я пытался реализовать магический метод pow , чтобы вернуть набор комплексных чисел для рациональных степеней и уникальное комплексное число для интегральной мощности.
Я пытался реализовать De Moivre'sФормула для интегральных степеней и ее обобщение для рациональных степеней.
def __init__(self,real=0,imag=0):
self.real=real
self.imag=imag
def arg(self):
return atan2(self.imag,self.real)
def __abs__(self):
return sqrt(self.real**2+self.imag**2)
def __str__(self):
if self.imag == 0:
return f'{self.real}'
if self.real == 0:
return f'{self.imag}i'
sign = '+' if self.imag>0 else '-'
return f'{self.real}{sign}{abs(self.imag)}i'
def __pow__(self, b):
if isinstance(b,int):
if b==0:
return 1
r=abs(self)**b
t=self.arg()**b
self.real=r*cos(t)
self.imag=r*sin(t)
return self
else:
roots=list()
c=Fraction(b).limit_denominator()
c,d=c.numerator,c.denominator
tem=self**c
r=abs(tem)**(1/d)
t=tem.arg()
for i in range(d):
tem.real=r*cos((t+2*pi*i)/d)
tem.imag=r*sin((t+2*pi*i)/d)
roots.append(tem)
return roots
Я ожидал получить кубические корни единства для утверждений
a=complex(1,0)
print(a**(1/3))
но я получил адреса для объектов внутри списка.
[<__main__.complex object at 0x02FCEBF0>, <__main__.complex object at 0x02FCEBF0>, <__main__.complex object at 0x02FCEBF0>]
при добавлении str (Tem) я получил ответы, но неверный, как
['1.7099759466766968', '-0.8549879733383481+1.4808826096823642i', '-0.8549879733383492-1.4808826096823637i']
Что я хотел бы понять, так этокак я могу иметь записи в списке сложных типов (которые я выбрал в качестве своего класса), и все же распечатать их успешно и почему я получаю неправильный ответ.