Ich habe versucht, eine komplexe Zahlenklasse zu erstellen. Ich habe eine add-Methode in der Klasse, die nach dem Hinzufügen eine neue komplexe Zahl zurückgibt, ohne das Argument komplexe Zahlen zu ändern.

Code

class complex:
    real = 0.00
    imag = 0.00

    def __init__ (self,r,i):
        complex.real = r
        complex.imag = i

    def add(comp1, comp2):
        x = comp1.real + comp2.real
        y = comp1.imag + comp2.imag
        result = complex(x,y)
        return result

Mit diesem Code stimmt etwas nicht. Ich kann es nicht finden. Bitte sag mir, wo ich falsch gelaufen bin.

enter image description here

Ich habe auch versucht, ein Selbstobjekt zu übergeben, aber es hat nicht funktioniert. def add(self, comp):

-2
Charan 7 Aug. 2015 im 09:54

3 Antworten

Beste Antwort
class complex:
    real = 0.00
    imag = 0.00

    def __init__ (self,r,i):
        complex.real = r
        complex.imag = i
  1. Sie verwenden Klasseneigenschaften, die für alle Instanzen von complex global gleich sind. Sie möchten diese Werte nur self zuweisen, nicht complex selbst.
def add(comp1, comp2):
    x = comp1.real + comp2.real
    y = comp1.imag + comp2.imag
    result = complex(x,y)
    return result
  1. Ihnen fehlt der Parameter self, oder Sie möchten die Methode a festlegen @staticmethod.

Richtige Implementierung:

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

    def add(self, comp):
        return Complex(self.real + comp.real, self.imag + comp.imag)


c1 = Complex(1, 2)
c2 = Complex(3, 4)
c3 = c1.add(c2)
2
Community 23 Mai 2017 im 11:51

In Ihrem __init__ sollten Sie für {Objekt- / dynamische Eigenschaften auf self anstelle von complex verweisen, andernfalls ändern Sie sie als Klassen- / statische Eigenschaften:

def __init__ (self,r,i):
    self.real = r
    self.imag = i
1
shevron 7 Aug. 2015 im 06:59

Wenn Sie das tun -

complex.real = r
complex.imag = i

Dies ist der Grund für Ihr Problem, wenn Sie eine neue Instanz der Klasse complex erstellen, ändern sich die Werte real und imag für die Klasse in die neue, und dies spiegelt sich in allen wider Instanzen des komplexen Objekts.

real und imag sind tatsächlich Klassenvariablen, die von allen Objekten / Instanzen der Klasse gemeinsam genutzt werden. Sie sollten sie als Instanzvariablen definieren als -

def __init__ (self,r,i):
    self.real = r
    self.imag = i

self zeigt auf die aktuelle Instanz. Wenn Sie also - self.real tun, zeigt es auf die Variable real der aktuellen Instanz / des aktuellen Objekts.

1
Anand S Kumar 7 Aug. 2015 im 06:58