Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中重写新方法的真实示例_Python_Class - Fatal编程技术网

Python中重写新方法的真实示例

Python中重写新方法的真实示例,python,class,Python,Class,我很熟悉\uuuuu new\uuuu与\uuuu init\uuuu的理论。前者定义如何创建类的实例(内存中的新对象),而后者初始化它(分配初始状态属性-字段)。网上有几篇关于这方面的文章,例如: 当您需要控制新实例的创建时,请使用\uuuuuu new\uuuu。 当您需要控制新文件的初始化时,请使用\uuuuu init\uuuu 例如 正如我所说的,我确实理解其中的区别,但是,我无法想象一个真实世界的例子,当我需要使用\uuuu new\uuuuu而不是\uuuu init\uuuu时。

我很熟悉
\uuuuu new\uuuu
\uuuu init\uuuu
的理论。前者定义如何创建类的实例(内存中的新对象),而后者初始化它(分配初始状态属性-字段)。网上有几篇关于这方面的文章,例如:

当您需要控制新实例的创建时,请使用
\uuuuuu new\uuuu
。 当您需要控制新文件的初始化时,请使用
\uuuuu init\uuuu
例如

正如我所说的,我确实理解其中的区别,但是,我无法想象一个真实世界的例子,当我需要使用
\uuuu new\uuuuu
而不是
\uuuu init\uuuu
时。如果我可以在对象创建期间自定义某个对象,我可以将其移动到对象初始化,只要它是同一个对象。上面提到的链接说:

通常,除非您 子类化不可变类型,如str、int、unicode或tuple


我的问题来了——有人能举一个例子说明这种情况吗,当覆盖
\uuuuuuuuuuuuuuuuu新的\uuuuuuuuuu
实际上是正确的解决方案时,不能使用
\uuuuuuu init\uuuuuuuuuuuu
来完成,这是为什么呢?

单音模式最明显的例子。 当你创建了一个以上的对象-它不是单音,对吗?
因此,在创建对象时必须处理此问题。解决方案的一个变体是使用
\uuuu new\uuuuu()
方法。

@MartijnPieters感谢您提供的链接,但无论如何,我希望有一个真实的例子。我猜当你创建一个不可变的元组时,你不能在init内部对它做任何事情,因为它的定义是不可变的。例如,您可能有一个未使用的对象池,初始化成本很高,因此当您需要一个新对象时,您只需从那里获取它,而不是创建一个完整的新对象。@tkoomzaaskz:“真实世界”:是的,您需要
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu