美文网首页
2023-06-08Python:面向对象中`__new__`

2023-06-08Python:面向对象中`__new__`

作者: 饮者L | 来源:发表于2023-06-07 15:24 被阅读0次

Python面向对象编程中newinit方法的区别。这两个方法都是类的特殊方法,它们在创建类的实例时起作用,但它们的功能和调用时机有所不同。

  1. newnew方法是一个静态方法,它在实例创建之前被调用。这个方法负责创建并返回一个实例对象。通常情况下,我们不需要重写这个方法,因为Python的内建object类已经实现了这个方法,可以满足大多数需求。但在某些特殊情况下,例如实现单例模式或者继承不可变类型时,我们可能需要重写new方法。例如:
class Singleton:
    _instance = None

    def __new__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance

s1 = Singleton()
s2 = Singleton()
print(s1 is s2)  # 输出:True
  1. initinit方法是一个实例方法,它在实例创建后被调用。这个方法负责初始化实例对象的属性。当我们创建一个类时,通常需要重写这个方法,以便根据传入的参数设置实例的属性。例如:
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

p = Person("张三", 30)
print(p.name)  # 输出:张三
print(p.age)  # 输出:30

总之,new方法在实例创建之前被调用,负责创建实例对象;init方法在实例创建后被调用,负责初始化实例对象的属性。在编写Python面向对象代码时,我们通常需要重写init方法,而只在特殊情况下才需要重写new方法。

相关文章

  • Python之__init__()、__new__()、__ca

    本篇用来介绍Python面向对象的思想,以及里边三个核心的方法。 1. __init__()与__new__() ...

  • 2018-04-09

    ?、简述面向对象中__new__和__init__区别 0、一句话解释什么样的语言能够用装饰器? 函数可以作为参数...

  • Python魔法方法-__new__

    __new__ 使用类名()创建对象时,Python解释器首先会调用__new__ 方法为对象分配空间,__new...

  • 魔术方法 Python's Magic Methods

    构建和初始化 __new__(cls,[...)一个对象的实例化时 __new__ 是第一个被调用的方法。在类中传...

  • Python 元类详解 __new__、__init__、__c

    了解元类之前,先了解几个魔术方法: __new__、__init__、__call__ __new__: 对象的创...

  • new与单例

    __new__方法 1、真正在实例化对象的时候第一个执行的方法是__new__ 2、若__new__没有正确返回当...

  • 面向对象(中)

    this关键字 ①通过this关键字可以明确地去访问一个类的成员变量,解决与局部变量名称冲突问题。 ②构造方法是在...

  • 面向对象中

    特殊方法• 在类中可以定义一些特殊方法也称为魔术方法• 特殊方法都是形如 xxx()这种形式• 特殊方法不需要我们...

  • Javascript-高级篇之面向对象

    面向对象 基于原型的面向对象 基于原型的面向对象方式中,对象(object)则是依靠构造器(constructor...

  • java基础-day07-面向对象

    面向对象 1. 面向对象 1.1 生活中的面向对象和面向过程 1.2 类和对象 类对象人类马云爸爸,麻花藤,乔布斯...

网友评论

      本文标题:2023-06-08Python:面向对象中`__new__`

      本文链接:https://www.haomeiwen.com/subject/ofanedtx.html