一个对象覆盖元组扩展的特殊方法?

时间:2016-01-28 09:43:29

标签: python class oop object overloading

如果标题不够明确,我将提供相关问题的示例。

我们说我有一个代表二维坐标的class Point(object)。 是否有可能创造出一种魔力"允许以下方法?

x, y = point

也许有一些使用迭代器的黑客?

2 个答案:

答案 0 :(得分:4)

您只需点击对象的迭代器协议即可完成此操作

class Point(object):
    def __init__(self, x,y):
        self.x = x
        self.y = y
        self.points = (x,y)
    def __iter__(self):
        return iter(self.points)

p = Point(1,5)
x,y = p
print x,y
# 1,5

查看http://www.rafekettler.com/magicmethods.html#sequence,了解有关如何将自定义对象转换为可迭代的更多信息;或者更确切地说,如何使用像iterable这样的对象。

答案 1 :(得分:2)

只需提供userid january fabruary march so on... 1 1 3 1 2 2 0 1 2 3 4 1 方法即可。

__iter__

但要小心。这意味着您的类在以前可能抛出类型错误的许多其他地方突然变得安全。

例如

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

p = Point(1, 2)
x, y = p
assert (1, 2) == (x, y)

因此,您可能希望提供除提供迭代器的def add_1(x): return x + 1 l = list(map(add_1, p)) # works, because the point is iterable 以外的方法。

例如

__iter__