gpt4 book ai didi

python - Python 的 __new__ 有哪些用例?

转载 作者:太空狗 更新时间:2023-10-29 21:27:02 26 4
gpt4 key购买 nike

我了解 __new__ 的作用(以及它与 __init__ 的不同之处)所以我对定义不感兴趣,我感兴趣的是何时以及如何使用 __new__

文档说:

In general, you shouldn't need to override __new__ unless you're subclassing an immutable type like str, int, unicode or tuple

但我想不出在其他情况下使用 __new__ 或如何正确使用它(例如,子类化不可变类型时或为什么在这种情况下需要它)。

那么,什么时候、为什么以及如何需要使用 __new__

我感兴趣的是用例,而不是它的作用(我知道它的作用)。

最佳答案

自己回答,我已经用过了

  • 创建一个单例模式(尽管有 ways 可以在不使用 __new__ 的情况下做到这一点)
  • dynamically extend classes from external modules无需实际编辑源
  • 自定义元类中的类(尽管我认为也可以使用 __call__)
  • 扩展 datetime.datetime 类(它是不可变的),如果在没有参数的情况下实例化则返回当前时间,如果使用参数实例化则返回调用 strptime 的结果一个字符串参数

如果你想改变用于构造不可变的参数,你需要 __new__ 子类化一个不可变类型,就像我在 datetime 例子中想要的那样,或者如果你不' 根本不想调用父级 __new__ 但返回一个以另一种方式甚至完全不同类型创建的实例。当您在 __init__ 中时,以任何方式更改对象都为时已晚,因此您需要在 __new__ 中执行此操作。

关于python - Python 的 __new__ 有哪些用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12835176/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com