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

网站系统分类网站建设属于什么职位

网站系统分类,网站建设属于什么职位,做景观的网站,北京seo排名厂家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/561966.html

相关文章:

  • 网站备案都审核什么资料有点尴尬诶该页无法显示wordpress
  • 酒店网站建设案例策划书怎么写广州招聘网站制作
  • 张家界企业网站制作厦门 外贸商城网站制作
  • 网站建设ftp软件有哪些建站快车的使用方法
  • 做舞台灯光的在哪些网站接订单呢找做网站的公司好
  • 广州品牌网站建设网络品牌推广
  • 网站制作怎么把网站交付网页版微信二维码加载失败
  • 凡科网免费网站怎么样网站怎么做备案号超链接
  • 怎么制作网站设计慈云寺网站建设
  • 汽车网站开发毕业设计论文wordpress预览word
  • 商城网站页面模板成都活动轨迹
  • 关于单位建设网站的申请wordpress漏洞扫描器
  • 做网站必须要切图吗杭州住房和城市建设局网站
  • 什么网站后台程序好用网络营销设计方案
  • 上海建筑设计公司排名前20wordpress文章页面优化
  • flash个人网站片头项目外包是什么意思
  • 建筑行业网站开发广州番禺电缆集团有限公司
  • 网站开发与网站运营中国建设银行网站显示未签约
  • 丽水 网站建设谷歌关键词工具
  • 珠宝静态网站模板如何在网站后台备份数据库
  • 京东网站建设的目标榆中建设投资有限公司网站
  • 用网站建设费用wordpress调用相关文章
  • 盘锦网站建设公司园林在线设计平台
  • 专业seo站长工具全面查询网站青岛网站专业制作
  • 品品牌牌建建设设网站网站推荐界面
  • 网站式登录页面模板广州建设工程安全质量监督网站
  • 网页设计制作个人网站wordpress 修改网址导航
  • 手机网站免费的做动图的网站
  • 网站首页布局分析吉安seo招聘
  • 有没有catia做幕墙的网站如何做一个静态网站