无法访问实例属性

时间:2016-11-02 17:46:24

标签: python composition

我尝试使用组合关系,但我无法访问复合类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)

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

  • self.X __init__方法中的B语句无效。您需要放置self.X = X
  • 您正在将参数传递给add(),但它不会采用任何参数。也许您想要添加参数(就像__init__ X的{​​{1}}一样。
  • 也许您甚至想要将参数传递给__init__的{​​{1}}(而不是A)。然后,您可以将它们传递给A
  • 的构造函数

答案 1 :(得分: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)