首页 > 后端开发 > Python教程 > Python 的神奇方法

Python 的神奇方法

Patricia Arquette
发布: 2024-12-31 09:03:14
原创
434 人浏览过

Python

1-> __new__(cls) 方法

Python 中创建新对象时会调用 __new__ 方法。它负责创建并返回类的新实例。当您想要自定义对象创建时,通常使用此方法,例如单例模式、缓存或管理内存。

__new__ 什么时候被调用?

__new__ 方法在 __init__ 之前调用,用于创建新对象。以下是创建新对象时的典型事件顺序:

  1. __new__:创建对象(内存分配)。
  2. __init__:初始化对象(设置属性)。

__new__ 的用例:

  1. 单例模式: Singleton 模式确保一个类只存在一个实例。在这种情况下, __new__ 检查实例是否已存在并重用它,而不是创建一个新实例。
   class Singleton:
       _instance = None

       def __new__(cls):
           if cls._instance is None:
               cls._instance = super(Singleton, cls).__new__(cls)
           return cls._instance

   s1 = Singleton()
   s2 = Singleton()
   print(s1 is s2)  # True, both are the same instance
登录后复制
  1. 缓存对象: 如果要根据某些条件缓存对象,可以在创建新对象之前使用 __new__ 来检查对象是否已存在(例如,在字典中)。这有助于优化内存使用。
   class CachedObject:
       _cache = {}

       def __new__(cls, value):
           if value in cls._cache:
               return cls._cache[value]
           obj = super().__new__(cls)
           cls._cache[value] = obj
           return obj

   obj1 = CachedObject("hello")
   obj2 = CachedObject("hello")
   print(obj1 is obj2)  # True, the same object is reused
登录后复制
  1. 内存管理:
    如果你想控制对象的内存分配(例如,优化内存使用或管理大对象),可以使用 __new__ 来自定义对象的创建方式。

  2. 不可变对象:
    __new__ 通常与不可变对象(如元组和字符串)一起使用。例如,当你想创建一个自定义的不可变对象时,你可以重写 __new__ 以确保它被正确创建。

   class MyTuple(tuple):
       def __new__(cls, *args):
           return super().__new__(cls, args)

   t = MyTuple(1, 2, 3)
   print(t)  # (1, 2, 3)
登录后复制

总之:

  • __new__ 在创建对象时被调用,并负责返回类的实例
  • 它对于优化对象创建、实现单例模式、管理对象缓存,甚至自定义内存分配很有用过程。

以上是Python 的神奇方法的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板