当前位置: 首页 > wzjs >正文

网站背景素材南宁网站建设服务公司

网站背景素材,南宁网站建设服务公司,品牌网站制作报价表,宁波做网站的专业公司1. Python 类的 __new__ 方法 在 Python 中,__new__ 是一个静态方法,负责创建类的实例。 默认行为:当定义一个类时,若未显式定义 __new__ 方法,Python 会自动调用父类(通常是 object)的 __new…

在这里插入图片描述

1. Python 类的 __new__ 方法

在 Python 中,__new__ 是一个静态方法,负责创建类的实例

  • 默认行为:当定义一个类时,若未显式定义 __new__ 方法,Python 会自动调用父类(通常是 object)的 __new__ 方法创建实例。
  • 关键作用__new__ 返回实例后,__init__ 方法才会被调用以初始化实例。

2. super() 的行为解析
  • super() 函数用于调用父类(超类)的方法。
  • 在类的上下文中super() 会根据当前类的 方法解析顺序(MRO) 查找下一个父类。

示例代码

class MyClass:def __new__(cls, *args, **kwargs):print("MyClass __new__ called")return super().__new__(cls)  # 调用父类的 __new__ 方法obj = MyClass()

运行结果

MyClass __new__ called

解析

  • MyClass 没有显式继承其他类,因此默认父类是 object
  • super().__new__(cls) 等价于 object.__new__(cls),即调用 object__new__ 方法创建实例。

3. 单例模式中的 __new__ 方法覆盖

在单例模式中,我们需要覆盖 __new__ 方法,以确保只创建一个实例。

示例代码

class SingletonLogger:_instance = None  # 保存唯一实例def __new__(cls, *args, **kwargs):if not cls._instance:# 调用父类的 __new__ 方法创建实例cls._instance = super().__new__(cls)cls._instance.init_logger()  # 初始化日志配置return cls._instancedef init_logger(self):import loggingself.logger = logging.getLogger("SingletonLogger")self.logger.setLevel(logging.INFO)handler = logging.StreamHandler()self.logger.addHandler(handler)def info(self, message):self.logger.info(message)

关键点

  • super().__new__(cls) 调用的是 object.__new__(cls),因为 SingletonLogger 的父类是 object
  • 这一步实际完成了实例的物理创建(分配内存等操作)。

4. 为什么必须调用 super().__new__(cls)
  • 实例的物理创建:Python 中对象的创建(内存分配)必须由 __new__ 方法完成。
  • 不调用父类 __new__ 的后果:若在 __new__ 中不调用父类的方法,将无法生成有效的实例。例如:
    class BadSingleton:_instance = Nonedef __new__(cls):if not cls._instance:# 错误!没有调用父类的 __new__,直接返回一个无效实例cls._instance = object.__new__(cls)return cls._instance
    
    • 此处 object.__new__(cls) 正确,但若完全忽略父类方法,会导致未定义行为。

5. 对比元类实现与 __new__ 覆盖实现
元类实现单例
class Singleton(type):def __call__(cls, *args, **kwargs):if not cls.instance:cls.instance = super().__call__(*args, **kwargs)return cls.instanceclass MyClass(metaclass=Singleton):pass
  • 原理:通过元类的 __call__ 方法拦截实例化请求,控制实例创建。
  • 调用链MyClass()Singleton.__call__()type.__call__()(实际创建实例)。
覆盖 __new__ 方法实现单例
class SingletonClass:_instance = Nonedef __new__(cls, *args, **kwargs):if not cls._instance:cls._instance = super().__new__(cls)return cls._instance
  • 原理:在类的 __new__ 方法中控制实例创建,直接返回已有实例。
  • 调用链SingletonClass()SingletonClass.__new__()object.__new__()

6. 验证 super() 的父类指向

通过打印 super() 的信息,可以明确其指向的父类:

class Parent:passclass Child(Parent):def __new__(cls, *args, **kwargs):print("Child __new__ called")print("super() in Child:", super())return super().__new__(cls)obj = Child()

输出

Child __new__ called
super() in Child: <super: <class 'Child'>, <Child object>>

解析

  • super()Child 类中指向的是 Parent 类(因为 Child 显式继承自 Parent)。
  • 若类没有显式继承,默认指向 object

总结

  • super().__new__(cls) 的作用:调用父类的 __new__ 方法完成实例的物理创建。
  • 父类的指向
    • 若类显式继承自某个父类(如 class MyClass(Parent)),则 super() 指向该父类。
    • 若类没有显式继承(如 class MyClass),则 super() 默认指向 object
  • 单例模式的核心:无论通过元类还是覆盖 __new__ 方法,核心逻辑都是控制实例的创建次数,确保全局唯一性。
http://www.dtcms.com/wzjs/27335.html

相关文章:

  • html5做网站无锡百姓网推广
  • 小精灵网站在线做语文湖北网站建设制作
  • 网站备案麻烦吗交换链接的作用
  • 沈阳包装设计公司基础建站如何提升和优化
  • 哪里教做网站的自动引流推广软件
  • 怎么做 niche网站北京培训学校
  • 毕业设计怎么做网站全网营销老婆第一人
  • 云南建设网站网络营销策略的制定
  • 成都定制app开发公司汕头seo
  • 政府机关网站建设方案什么是seo如何进行seo
  • 亚马逊购物网seo快速入门教程
  • 关于公司网站建设百度关键词收费标准
  • 泉州握旗公司网站建设seo必备软件
  • .我爱你 网站一键优化表格
  • 怎么给一个网站做推广北京网站seo技术厂家
  • 怎样登录韵网网站小程序开发费用明细
  • jsp动态网站开发实用教程如何制作一个宣传网页
  • 简单asp网站源码旅游产品推广有哪些渠道
  • 东莞中堂网站建设seo01
  • 做设计最好的参考网站深圳防疫措施优化
  • 关键词和网站的关系网址seo查询
  • 车机油哪个网站做的好做百度推广的公司电话号码
  • 郑州做网站建设网络营销推广及优化方案
  • 龙岩网站建设龙岩网站制作关键词排名霸屏代做
  • 筹划电子商务网站建设对seo的认识和理解
  • 株洲建设网站制作武汉标兵seo
  • php网站上传写手代写平台
  • 即墨做网站做外贸用什么软件找客户
  • 买汽车最好的网站建设免费无代码开发平台
  • 邯郸专业做网站地方怎么建立企业网站免费的