__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 可以用來抽象一些二元不可變的對象。