我的一个练习说是为Point使用Point对象或元组编写一个 add 方法:
这到底有多远,我不确定我的代码的元组部分是否准确。有人可以说明如何将这个程序称为元组部分。我想我已经钉了第一部分。
这是我的代码:
Class Point():
def__add__(self,other):
if isinstance(other,Point):
return self.add_point(other)
else:
return self.print_point(other)
def add_point(self,other):
totalx = self.x + other.x
totaly = self.y + other.y
total = ('%d, %d') % (totalx, totaly)
return total
def print_point(self):
print ('%d, %d) % (self.x, self.y)
blank = Point()
blank.x = 3
blank.y = 5
blank1 = Point()
blank1.x = 5
blank1.y = 6
这就是我到目前为止所构建的内容,我不知道如何使用元组部分实际运行它。我知道if blank + blank1
if部分是否会运行并调用add_point
函数但是如何启动元组。我不确定我是否正确写了这个...请帮助。
答案 0 :(得分:2)
您可以从元组中简单地派生您的类(或只是实现__getitem__
)。
class Point(tuple):
def __new__(cls, x, y):
return tuple.__new__(cls, (x, y))
def __add__(self, other):
return Point(self[0] + other[0], self[1] + other[1])
def __repr__(self):
return 'Point({0}, {1})'.format(self[0], self[1])
p = Point(1, 1)
print p + Point(5, 5) # Point(6, 6)
print p + (5, 5) # Point(6, 6)
答案 1 :(得分:1)
或者,如果您希望能够使用point.x和point.y语法,则可以实现以下内容:
class Point():
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
if isinstance(other, Point):
return Point(self.x + other.x, self.y + other.y)
elif isinstance(other, tuple):
return Point(self.x + other[0], self.y + other[1])
else:
raise TypeError("unsupported operand type(s) for +: 'Point' and '{0}'".format(type(other)))
def __repr__(self):
return u'Point ({0}, {1})'.format(self.x, self.y) #Remove the u if you're using Python 3