在以下使用python的代码中,是否正在使用def __sub__()
和def __eq__()
?我习惯将它们视为variableObject.action
,就像说my_dog.sit()
一样。但是,使用双下划线时,似乎很简单,只需调用class Point3D()
中可能会用到的def is_win()
。
我也很难读取这个特定的while not s or s[0] in Yy
,因为它的[0]似乎表示只需输入即可退出而不进入循环。此外,我对这里如何使用Yy
感到困惑。
我尝试输入s[1]
,它说索引超出范围,确认输入要退出。它不应该只是读while not s[0]
以获得更简洁的代码吗?
class Point3D:
'''Three dimensional point class, supporting
subtraction and comparison. '''
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
def __sub__(self, other):
d1 = self.x - other.x
d2 = self.y - other.y
d3 = self.z - other.z
return Point3D(d1, d2, d3)
def __eq__(self, other):
return(self.x == other.x and self.y == other.y
and self.z == other.z)
def main():
s = ''
while not s or s[0] in 'Yy':
p1 = get_point()
p2 = get_point()
p3 = get_point()
if is_win(p1,p2,p3):
print('is a winning combination.')
else:
print('Is not a win.')
s = input('Do again(Y or N)?')
def get_point():
s = input('Enter point x, y, z format:')
ls = s.split(',')
x, y, z = int(ls[0]), int(ls[1]), int(ls[2])
return Point3D(x,y,z)
def is_win(p1,p2,p3):
if(p3-p2 == p2 - p1
or p2-p3 == p3-p1
or p3-p1 == p1-p2):
return True
else:
return False
main()
答案 0 :(得分:0)
__sub__
和__eq__
都是python类中的“特殊”方法。每当比较同一个类的两个对象时,就使用__eq__
,__gt__
或__lt__
中的一个。 __eq__
只是==
。因此,当您执行p1 == p2
时,请使用__eq__
方法。同样,__sub__
用于减法。当您执行p1 - p2
时,您将使用__sub__
。 您使用的方法与其他方法不同。您不要 p1.__sub__(p2)
。
第二部分是您正在等待s
为y
或 Y
。