2016-11-02 5 views
0

Я пытаюсь использовать соотношение композиций, но я не могу получить доступ к составному классу A: с этим кодом. Я пытаюсь добавить в список класса A объект из класса B.Не удается получить доступ к атрибутам экземпляра

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) 

Когда я тест я получаю эту ошибку:

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) 

Пожалуйста, помогите мне решить эту проблему.

+0

... вы пытаетесь вызвать 'objA.add' с тремя аргументами (плюс неявное' self'), когда вы написали метод, чтобы принимать только 'self'. Что вас смущает? (Кроме того, у вас есть еще ряд ошибок в вашем коде.) – kindall

+1

ваша ошибка говорит вам, что 'def add (self)' принимает только один аргумент, и вы пытались дать ему 4 ...... поэтому либо принять список чисел в этой функции или 3 дополнительные переменные. Кроме того, в вашем коде есть другие ошибки. – MooingRawr

+1

@kiran Пожалуйста, не изменяйте - и изменяйте - намерение оригинального плаката (OP). –

ответ

0

Во-первых, ваш класс B инициализатор неправилен:

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

Далее, ваш класс A добавить нужно создать новый объект B и добавить к списку:

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

Большое спасибо за решение моей проблемы – BORUSSEN11

1
  • Заявление self.X в __init__ методе B ничего не делает. Вам нужно поставить self.X = X.
  • Вы передаете параметры add(), но никаких параметров не требуется. Может быть, вы хотите добавить параметры (таким же образом, у вас есть некоторые для __init__ из X.
  • Может быть, вы даже хотите, чтобы передать параметры в __init__ из A (а не A). После этого вы можете передавать их в конструктор . B
Смежные вопросы