-2

尝试.

from dataclasses import dataclass, field, InitVar

@dataclass
class XYPoint:
    last_serial_no = 0
    x: float
    y: float = 0
    skip: InitVar[int] = 1
    serial_no: int = field(init=False)

    def __post_init__(self, skip):
        self.serial_no = self.last_serial_no + self.skip
        self.__class__.last_serial_no = self.serial_no

    def __add__(self, other):
        new = XYPoint(self.x, self. y)
        new.x += other.x
        new.y += other.y

以此作为测试示例:

XYPoint.__add__(32,34)

运行代码时,出现错误: AttributeError: 'int' object has no attribute 'x' 尝试将 return 添加到 def;同样的错误。

4

1 回答 1

2

您的示例没有尝试添加 的两个实例XYPoint,而只是尝试使用__add__的方法,在这种情况下XYPoint,除了第一个参数 of 之外,它不是一个 int。在函数中它试图做类似的事情selfXYPoint32__add__

new = XYPoint(32.x, 32.y)

您可能会猜到这是一个错误。

也许这可能是你想要做的。

>>> @dataclass
... class XYPoint:
...     x: float
...     y: float
...     def __add__(self, other):
...         cls = self.__class__
...         return cls(self.x+other.x, self.y+other.y)
...
>>> XYPoint(2,3) + XYPoint(5,7)
XYPoint(x=7, y=10)
>>>
于 2019-04-28T20:59:27.170 回答