2016-11-02 10 views
0

Ich versuche, die Zusammensetzungsbeziehung zu verwenden, aber ich kann nicht auf die zusammengesetzte Klasse A zugreifen: mit diesem Code Ich versuche, der Liste der Klasse A ein Objekt aus der Klasse hinzuzufügen B.Zugriff auf Instanzattribute nicht möglich

class B: 
    def __init__(self,X,Y,Z): 
     self.X 
     self.Y 
     self.Z 
    def Xreturner(self): 
     return self.X 
    def Yreturner(self): 
     return self.Y 
    def Zreturner(self): 
     return self.Z 

class A: 
    def __init(self): 
     self.lst=[[1,2,3],[3,4,5],] 
     self.b=B() 
    def add(self): # trying to add b object to the list 
     self.lst.append(self.b) 
#### TEST#### 
objA=A() 
objA.add(6,7,8) 

Wenn ich teste ich bekomme diese Fehlermeldung:

Traceback (most recent call last): 
    File "home/testXYZ.py", line 28, in <module> 
    objA.add(6,7,8) 
TypeError: add() takes exactly 1 argument (4 given) 

Bitte helfen Sie mir, diese zu lösen.

+0

... Sie versuchen, 'objA.add' mit drei Argumenten (plus dem impliziten' self') aufzurufen, wenn Sie die Methode geschrieben haben, nur 'self' zu nehmen. Worüber bist du verwirrt? (Sie haben auch eine Reihe anderer Fehler in Ihrem Code.) – kindall

+1

Ihr Fehler sagt Ihnen, dass 'def add (self)' nur 1 Argument braucht und Sie versucht haben, es 4 zu geben ...... also entweder akzeptieren a Liste von Zahlen in dieser Funktion oder 3 zusätzliche Variablen. Außerdem gibt es andere Fehler in Ihrem Code. – MooingRawr

+1

@kiran Bitte bearbeiten und ändern Sie nicht die Absicht des ursprünglichen Posters (OP). –

Antwort

0

Zuerst Klasse B initializer ist falsch:

class B: 
    def __init__(self, x, y, z): # <== should use snake_case for vars 
     self.x = x 
     self.y = y 
     self.z = z 

Als nächstes Klasse A hinzufügen eines neuen B-Objekt erstellen sollte und zur Liste hinzufügen:

def add(self, x, y, z): 
     new_b = B(x, y z) 
     self.lst.append(new_b) 
+0

Vielen Dank, die mein Problem lösen – BORUSSEN11

1
  • Die Aussage self.X im __init__ Methode von B tut nichts. Sie müssen self.X = X setzen.
  • Sie übergeben Parameter an add(), aber es nimmt keine Parameter. Vielleicht möchten Sie Parameter hinzufügen (in der gleichen Art und Weise einige für __init__ von X haben.
  • Vielleicht möchten Sie auch Parameter übergeben, um die __init__ von A (statt zu A). Dann können Sie diese an den Konstruktor übergeben . B
Verwandte Themen