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

2023-06-07  本文已影响0人  饮者L

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方法。

上一篇 下一篇

猜你喜欢

热点阅读