>>> class C(str):
... def __new__(cls, *args, **kw):
... return str.__new__(cls, *args, **kw)
...
>>> c = C("hello world")
>>> type(c)
>>> c.__class__.__mro__
(, , , )
因为在构造对象之后调用__init__,所以修改不可变类型的值太晚了。注意__new__是一个类方法,所以我已经调用了第一个参数cls
有关详细信息,请参阅here
>>> class C(str):
... def __new__(cls, value, meta):
... obj = str.__new__(cls, value)
... obj.meta = meta
... return obj
...
>>> c = C("hello world", "meta")
>>> c
'hello world'
>>> c.meta
'meta'