Python:如何区分同一类的两个不同对象的两个变量?

时间:2016-10-22 16:49:24

标签: python class

我的学校任务有问题。我想要我的最后一个方法来测试两个矩形是否相同。唯一的问题是我似乎无法区分两个不同的高度,widiths和两个不同矩形的不同点(这是矩形的左下角点),任何建议?

非常感谢

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

class Rectangle():
    def __init__(self,Point,w,h):
        self.Point=Point
        self.widith=w**strong text**
        self.height=h

    def same(self,Rectangle):
        if Rectangle.self.Point==self.Point and Rectangle.self.widith==self.widith and Rectangle.self.height==self.height:
            return True
        else:
            return False

1 个答案:

答案 0 :(得分:2)

首先,不要对函数参数和类使用相同的名称。它使代码混乱且容易出错。试试这个:

class Rectangle:
    def __init__(self, point, width, height):
        self.point = point
        self.widith = width
        self.height = height

现在我假设point变量是Point类的实例。在这种情况下,通过==将一个点与另一个点进行比较将失败,因为默认情况下==检查两个对象在内存中是否为同一对象时是否相同。

因此,same方法的实现可能如下所示:

def same(self, other):
    return (
        self.point.x == other.point.x
        and self.point.y == other.point.y
        and self.width == other.width
        and self.height == other.height
    )

如果您在__eq__类上覆盖内置==方法(负责Point运算符的行为),请执行以下操作:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __eq__(self, other):
        return self.x == other.x and self.y == other.y

然后same方法可以简化为:

def same(self, other):
    return (
        self.point == other.point  # now __eq__ will be called here
        and self.width == other.width
        and self.height == other.height
    )