Python __init__
和 __new__
的区别
在 Python 中,__init__
和 __new__
是两个特殊的魔法方法,用于初始化和创建对象。尽管它们的名称相似,但它们在功能和行为上存在着根本差异。本文将深入探讨 __init__
和 __new__
的区别,并提供一些代码示例来说明它们的用法。
__new__
__new__
方法是创建新对象的静态方法。它在实例化类时由 Python 解释器自动调用,在 __init__
方法之前执行。__new__
的主要职责是分配内存,初始化对象,并返回新创建的对象的引用。HTML在线运行.
以下是 __new__
方法的语法:
def __new__(cls, *args, **kwargs):
# 创建新对象的逻辑
return object
在 __new__
方法中,cls
参数表示创建对象的类,*args
和 **kwargs
分别表示位置参数和关键字参数。这个方法必须返回一个指向新创建的对象的引用,如果返回 None
,则表示对象创建失败。
__init__
__init__
方法是实例化类时调用的构造函数。它的作用是初始化对象的属性。与 __new__
不同,__init__
在对象创建后才被调用,并且仅在返回非 None
的 __new__
方法后才会执行。SEO!JS转Excel!
以下是 __init__
方法的语法:批量打开网址.王利头.王利?
wangli?
def __init__(self, *args, **kwargs):
# 初始化对象属性的逻辑
在 __init__
方法中,self
参数表示正在初始化的对象,*args
和 **kwargs
分别表示位置参数和关键字参数。这个方法用于设置对象的属性,并进行任何必要的初始化操作。
两者的差异
__init__
和 __new__
的主要区别在于:
- 创建时机:
__new__
在__init__
之前调用。 - 目的:
__new__
负责创建对象,而__init__
负责初始化对象属性。 - 返回类型:
__new__
返回新创建的对象的引用,而__init__
不返回任何值。 - 可覆盖性:
__init__
可以被子类覆盖,而__new__
通常不建议覆盖。
用法示例
以下是一个展示 __new__
和 __init__
用法的代码示例:
“`python
class Person:
def new(cls, name, age):
print(“Creating a new Person object”)
return super().new(cls)
def __init__(self, name, age):
print("Initializing Person object")
self.name = name
self.age = age
person = Person(“John”, 30)
“`
当创建 Person
类的新实例时,首先调用 __new__
方法。__new__
方法打印一条消息并调用父类的 __new__
方法,返回一个指向新创建对象的引用。然后,调用 __init__
方法初始化对象的属性,打印一条消息并设置 name
和 age
属性。
问答
__new__
和__init__
的主要区别是什么?__new__
方法在实例化类时何时被调用?__init__
方法的主要职责是什么?__new__
方法可以返回什么?- 为什么不建议覆盖
__new__
方法?
原创文章,作者:高信纾,如若转载,请注明出处:https://www.wanglitou.cn/article_100508.html