Python ';int';对象没有属性';x';

Python ';int';对象没有属性';x';,python,class,python-3.x,Python,Class,Python 3.x,我正在尝试使用\uuuu add\uuuu制作一个添加向量的程序: class vects: def __init__(self,x,y): self.x = x self.y = y def __add__(self, vect): total_x = self.x + vect.x total_y = self.y + vect.y return vects(total_x, total_y)

我正在尝试使用
\uuuu add\uuuu
制作一个添加向量的程序:

class vects:
    def __init__(self,x,y):
        self.x = x
        self.y = y

    def __add__(self, vect):
        total_x = self.x + vect.x
        total_y = self.y + vect.y
        return vects(total_x, total_y)

plusv1 = vects.__add__(2,5)
plusv2 = vects.__add__(1,7)
totalplus = plusv1 + plusv2
产生的错误如下:

line 12, in <module> plusv1 = vects.__add__(2,5)
line 7, in __add__ total_x = self.x + vect.x
AttributeError: 'int' object has no attribute 'x' 
第12行,在plusv1=vects中添加(2,5)
第7行,在uu添加uuu总计u x=self.x+vect.x中
AttributeError:“int”对象没有属性“x”

你不能像那样使用
\uuuuuuuuuuuuuuuuuu
!:-)<当
+
向量
类的实例上使用
+
时,code>\uuu添加将被隐式调用

因此,首先应该初始化两个向量实例:

v1 = Vects(2, 5)
v2 = Vects(1, 7)
然后添加它们:

totalplus = v1 + v2
如果您添加一个漂亮的
\uuuuu str\uuuu
来获得新向量的漂亮表示:

class Vects:
    def __init__(self,x,y):
        self.x = x
        self.y = y

    def __add__(self, vect):
        total_x = self.x + vect.x
        total_y = self.y + vect.y
        return Vects(total_x, total_y)

    def __str__(self):
        return "Vector({}, {})".format(self.x, self.y)
您可以通过打印来查看
totalplus

print(totalplus)
Vector(3, 12)

根据我对代码的理解,您正在使用的函数应该如下所示:
vects.\uu添加(vects(2,5))
而不是
vects.\uu添加(2,5)
由于add定义只等待1个参数,这似乎是vects classI的另一个实例,因此我不会说通过直接调用从类调用
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。好的,Python并不是专门为这样的事情设计的,但是它可以在一个非常复杂的cast案例中使用,具有多重继承,在这个案例中,我们需要调用另一个类的
\uuuuuuuuuuuuuuu
方法。出于某种原因。这是可能发生的。比你想象的要快。我猜。当然,如果你想有一个好的编程风格(参见),这个类应该被称为
Vector
@Rightleg,但不确定用例;对于多重继承,你永远不会想硬编码一个类名(这是
super
存在的原因之一)。我不是说用例可能不存在,只是这不是一个,所以没有必要无缘无故地混淆OP。@JimFasarakis Hilliard是的,这就是为什么我没有将此作为答案发布xD的原因