• <tfoot id='bC0cU'></tfoot>
      <i id='bC0cU'><tr id='bC0cU'><dt id='bC0cU'><q id='bC0cU'><span id='bC0cU'><b id='bC0cU'><form id='bC0cU'><ins id='bC0cU'></ins><ul id='bC0cU'></ul><sub id='bC0cU'></sub></form><legend id='bC0cU'></legend><bdo id='bC0cU'><pre id='bC0cU'><center id='bC0cU'></center></pre></bdo></b><th id='bC0cU'></th></span></q></dt></tr></i><div id='bC0cU'><tfoot id='bC0cU'></tfoot><dl id='bC0cU'><fieldset id='bC0cU'></fieldset></dl></div>

    1. <legend id='bC0cU'><style id='bC0cU'><dir id='bC0cU'><q id='bC0cU'></q></dir></style></legend>

      <small id='bC0cU'></small><noframes id='bC0cU'>

        <bdo id='bC0cU'></bdo><ul id='bC0cU'></ul>

      1. `__init__` 能做什么而 `__new__` 不能?

        What can `__init__` do that `__new__` cannot?(`__init__` 能做什么而 `__new__` 不能?)
        • <i id='JibV0'><tr id='JibV0'><dt id='JibV0'><q id='JibV0'><span id='JibV0'><b id='JibV0'><form id='JibV0'><ins id='JibV0'></ins><ul id='JibV0'></ul><sub id='JibV0'></sub></form><legend id='JibV0'></legend><bdo id='JibV0'><pre id='JibV0'><center id='JibV0'></center></pre></bdo></b><th id='JibV0'></th></span></q></dt></tr></i><div id='JibV0'><tfoot id='JibV0'></tfoot><dl id='JibV0'><fieldset id='JibV0'></fieldset></dl></div>
              <bdo id='JibV0'></bdo><ul id='JibV0'></ul>
            • <legend id='JibV0'><style id='JibV0'><dir id='JibV0'><q id='JibV0'></q></dir></style></legend>
            • <tfoot id='JibV0'></tfoot>
                <tbody id='JibV0'></tbody>

                <small id='JibV0'></small><noframes id='JibV0'>

                1. 本文介绍了`__init__` 能做什么而 `__new__` 不能?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  在 Python 中,__new__ 用于初始化不可变类型,__init__ 通常用于初始化可变类型.如果 __init__ 从语言中删除,什么不能再做(容易)?

                  In Python, __new__ is used to initialize immutable types and __init__ typically initializes mutable types. If __init__ were removed from the language, what could no longer be done (easily)?

                  例如,

                  class A:
                  
                      def __init__(self, *, x, **kwargs):
                          super().__init__(**kwargs)
                          self.x = x
                  
                  
                  class B(A):
                  
                      def __init__(self, y=2, **kwargs):
                          super().__init__(**kwargs)
                          self.y = y
                  

                  可以像这样使用 __new__ 重写:

                  Could be rewritten using __new__ like this:

                  class A_N:
                  
                      def __new__(cls, *, x, **kwargs):
                          obj = super().__new__(cls, **kwargs)
                          obj.x = x
                          return obj
                  
                  
                  class B_N(A_N):
                  
                      def __new__(cls, y=2, **kwargs):
                          obj = super().__new__(cls, **kwargs)
                          obj.y = y
                          return obj
                  

                  <小时>

                  澄清问题范围:这不是关于如何使用 __init____new__ 或它们之间有什么区别的问题.这是一个关于如果从语言中删除 __init__ 会发生什么的问题.有什么会坏吗?有什么事情会变得更难或不可能吗?


                  Clarification for scope of question: This is not a question about how __init__ and __new__ are used or what is the difference between them. This is a question about what would happen if __init__ were removed from the language. Would anything break? Would anything become a lot harder or impossible to do?

                  推荐答案

                  你可以在 __init__ 中做的所有事情,也可以在 __new__ 中完成.

                  Everything you can do in __init__ can also be done in __new__.

                  那么,为什么要使用 __init__?
                  因为您不必将实例存储在变量中(示例代码中的 obj ),然后再费心返回它.你可以专注于你真正想做的事 –初始化可变对象.

                  Then, why use __init__?
                  Because you don't have to store instance in variable (obj in your example code), and later bother returning it. You can focus on what you realy want to do – initializing mutable object.

                  这篇关于`__init__` 能做什么而 `__new__` 不能?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  Initialize Multiple Numpy Arrays (Multiple Assignment) - Like MATLAB deal()(初始化多个 Numpy 数组(多重赋值) - 像 MATLAB deal())
                  How to extend Python class init(如何扩展 Python 类初始化)
                  What#39;s the difference between dict() and {}?(dict() 和 {} 有什么区别?)
                  What is a wrapper_descriptor, and why is Foo.__init__() one in this case?(什么是 wrapper_descriptor,为什么 Foo.__init__() 在这种情况下是其中之一?)
                  Initialize list with same bool value(使用相同的布尔值初始化列表)
                  setattr with kwargs, pythonic or not?(setattr 与 kwargs,pythonic 与否?)
                    <tbody id='LPQd9'></tbody>

                    <tfoot id='LPQd9'></tfoot>
                    <i id='LPQd9'><tr id='LPQd9'><dt id='LPQd9'><q id='LPQd9'><span id='LPQd9'><b id='LPQd9'><form id='LPQd9'><ins id='LPQd9'></ins><ul id='LPQd9'></ul><sub id='LPQd9'></sub></form><legend id='LPQd9'></legend><bdo id='LPQd9'><pre id='LPQd9'><center id='LPQd9'></center></pre></bdo></b><th id='LPQd9'></th></span></q></dt></tr></i><div id='LPQd9'><tfoot id='LPQd9'></tfoot><dl id='LPQd9'><fieldset id='LPQd9'></fieldset></dl></div>

                            <bdo id='LPQd9'></bdo><ul id='LPQd9'></ul>
                          • <small id='LPQd9'></small><noframes id='LPQd9'>

                            <legend id='LPQd9'><style id='LPQd9'><dir id='LPQd9'><q id='LPQd9'></q></dir></style></legend>