Python 3类中的复数除法

时间:2019-05-25 20:50:16

标签: python python-3.x class oop methods

我无法在Python类中为复数创建__div__方法,该方法应将两个复数相除。

这是我的代码:

class Complex(object):
        def __init__(self, real = 0, imag = 0):
            self.real = real
            self.imag = imag

        def __str__(self):
            if self.imag > 0:
                return str(self.real) + "+" + str(self.imag) + "i"
            elif self.imag < 0:
                return str(self.real) + str(self.imag) + "i"

        def __div__(self, other):
            x = self.real * other.real + self.imag * other.imag
            y = self.imag * other.real - self.real * other.imag
            z = other.real**2 + other.imag**2
            real = x / z
            imag = y / z
            return Complex(real, imag)

no = Complex(2,-8)
no2 = Complex(3,7)
print(no/no2)

不幸的是,我的方法行不通。有什么建议吗?

3 个答案:

答案 0 :(得分:3)

__div__在Python 3中不再存在。它被/的__truediv__和// //的__floordiv__取代。

看看 https://docs.python.org/3/reference/datamodel.html

答案 1 :(得分:2)

它是__truediv__,而不是__div____div__是旧的Python 2“ floordiv表示整数,truediv表示非整数”除法的名称。

在修复问题时,可能应该在else中添加一个__str__大小写。

答案 2 :(得分:1)

您需要创建一个方法__div__(self, other),在其中您将no分开,同时还要创建一个新方法__opposite__(self),以便在进行乘数运算时更改符号, 还调用方法如何定义即no / no1不是上帝方法

使用@johnO解决方案,忽略了__truediv__ 因此OP可以使用no/no2来除以两个复数。

请参见下面的代码

类Complex(对象):         def init (自我,真实= 0,imag = 0):             self.real =真实             self.imag = imag

    def __str__(self):
        if self.imag > 0:
            return str(self.real) + "+" + str(self.imag) + "i"
        elif self.imag < 0:
            return str(self.real) + str(self.imag) + "i"
    def __opposite__(self):
        self.real =self.real
        self.imag = self. imag if self.imag<0 else self.imag * -1


    def __truediv__(self, other):
        other.__opposite__()



        x = self.real * other.real - self.imag * other.imag
        y = self.imag * other.real + self.real * other.imag
        z = other.real**2 + other.imag**2
        self.new_real = x / z
        self.new_imag = y / z
        if self.new_imag>0:
            result = "{} + {}i".format(self.new_real, self.new_imag)
        else:
            result = "{} {}i".format(self.new_real, self.new_imag)
        return result

no = Complex(4,5)
no2 = Complex(2,6)
print(no/no2)

输出

0.24 + 0.68i