__init__ 更多的作用是初始化属性,__new__ 进行的是创建对象,显然 __new__ 要早于 __init__ 发生。

考虑一个继承自 tuple 的类,显然在 __init__ 无法对其成员进行修改;

class Edge(tuple):
    def __new__(cls, e1, e2):
        return tuple.__new__(cls, (e1, e2))
    def __repr__(self):
        return 'Edge (%s, %s)' % (repr(self[0]), repr(self[1]))
    __str__ = __repr__

显然这里定义的类 Edge 可以用来抽象一些二元不可变的对象。

posted on 2016-12-08 10:29  未雨愁眸  阅读(137)  评论(0编辑  收藏  举报