使用__eq__在Python中修改类

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (216)

我需要添加一个eq方法,如果坐标引用平面中的相同点(即,具有相同的x和y坐标),则返回True,并且对如何执行此操作感到困惑。

我已经尝试了一些使用eq的代码,我仍然遇到错误,我不太清楚为什么。

class Coordinate(object):
        def __init__(self, x, y):
            self.x = x
            self.y = y
    def getX(self):
        # Getter method for a Coordinate object's x coordinate.
        # Getter methods are better practice than just
        # accessing an attribute directly
        return self.x
    def getY(self):
        # Getter method for a Coordinate object's y coordinate
        return self.y
    def __str__(self):
        return '<' + str(self.getX()) + ',' + str(self.getY()) + '>'
    def __eq__(Coordinate, otherPoint):
        if self.GetX() == otherPoint.getX()&& self.GetY() == otherPoint.getY()
            return True

x=5
y=5

如果两个坐标都是相同的数字,则预期的输出将返回true,如果x和y不是相同的数字,则返回false。

提问于
用户回答回答于

代码中的一些问题/修复

  • 你其实并不需要GetXGetY,你可以参考的属性xy直接。
  • && 在Python中不是有效的语法,而是使用 and
  • 第一个论点__eq__self
  • 您可以使用f-strings格式化您的字符串,如果你使用的是python3.6 +,否则你可以使用格式字符串
  • 您可以选择提高a TypeError以确保other类型Coordinate

因此更新的代码看起来像

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

    def __str__(self):
        #Use a f-string to format your string representation
        return f'<{self.x},{self.x}>'

        #If python3.5 and below, you can use format string as below
        #return '<{},{}>'.format(self.x, self.y)

    def __eq__(self, other):
        #If other is not an instance of Coordinate, raise TypeError
        if not isinstance(other, Coordinate):
            raise TypeError('An instance of class Coordinate is expected')
        #Compare both coordinates and return True or False
        return self.x == other.x and self.y == other.y

然后你可以像下面这样使用类

c1 = Coordinate(5,5)
c2 = Coordinate(6,6)

print(c1)
#<5,5>
print(c2)
#<6,6>
print(c1 == c1)
#True
print(c1 == c2)
#False
print(c1 == 1)
#TypeError: An instance of class Coordinate is expected
用户回答回答于

这么多小错误......

  • GetX 是不一样的 getX
  • 一个if语句需要:在年底
  • __init__条款的缩进是错误的
  • && 在python中不存在,它被称为 and
  • __eq__函数并不总是返回,它需要一个else条款,或干脆直接返回布尔表达式
  • __eq__需要的第一个论点self
class Coordinate(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def getX(self):
        # Getter method for a Coordinate object's x coordinate.
        # Getter methods are better practice than just
        # accessing an attribute directly
        return self.x
    def getY(self):
        # Getter method for a Coordinate object's y coordinate
        return self.y
    def __str__(self):
        return '<' + str(self.getX()) + ',' + str(self.getY()) + '>'
    def __eq__(self, otherPoint):
        return self.getX() == otherPoint.getX() and self.getY() == otherPoint.getY()

扫码关注云+社区

领取腾讯云代金券