2015-07-13 73 views
2

看来Python的不可变类的__init__方法是没有意义的,因为在创建一个对象之后,属性的赋值是不允许的。但显然__init__方法确实存在不可变对象。它是如何实现的?它是否有空方法体?Python不可变类的__init__方法,例如漂亮的样子?

+0

通常如果你想缓存实例,你将使用'__new__'来返回一个先前构造的对象。我们使用的常见模式是通过namedtuple继承一个元组(不可变),并设置'__slots__ =()'来防止赋值给任意属性。 –

+0

你在寻找一个*不可变*或*内建*模式吗?从我所知道的内容来看,一个新的float [只在C中定义](https://hg.python.org/cpython/file/c6880edaf6f3/Objects/floatobject.c#l1788)。 – Makoto

回答

2

__init__什么都不做,只是继承自object。所有的工作都在__new__完成。

In [1]: float.__init__ 
Out[1]: <slot wrapper '__init__' of 'object' objects> 

In [2]: float.__new__ 
Out[2]: <function float.__new__> 

float类的tp_new的定义为float_new,由此可以看出here