Python面向对象编程中new和init方法的区别。这两个方法都是类的特殊方法,它们在创建类的实例时起作用,但它们的功能和调用时机有所不同。
- new:new方法是一个静态方法,它在实例创建之前被调用。这个方法负责创建并返回一个实例对象。通常情况下,我们不需要重写这个方法,因为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
- init:init方法是一个实例方法,它在实例创建后被调用。这个方法负责初始化实例对象的属性。当我们创建一个类时,通常需要重写这个方法,以便根据传入的参数设置实例的属性。例如:
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方法。









网友评论