【python】super().__new__(cls)方法简介
1、 `__new__` 方法2、`super()` 函数3、 `super().__new__(cls)` 的使用4、示例在Python中,是一个特殊的方法调用,用于创建一个新的实例。
·
在Python中,
super().__new__(cls)
是一个特殊的方法调用,用于创建一个新的实例。这个调用的工作原理和意义可以从几个不同的角度来理解:
1、 __new__
方法
__new__
是一个特殊的静态方法(因此需要显式传递cls
参数),用于创建并返回一个新的实例。它是在一个对象实例化(即创建)时最先被调用的方法。- 与
__init__
不同,__init__
是用于初始化已创建的实例,__new__
实际上是用来创建实例。因此,__new__
是创建实例的构造器,而__init__
是初始化实例的初始化器。
2、super()
函数
super()
函数用于调用父类(超类)的方法。它返回了一个代理对象,这个对象将允许你调用定义在超类中的方法。- 当使用
super()
调用__new__
方法时,它通常是在多继承的场景下,或者你需要在子类中明确调用父类的__new__
方法时使用。
3、 super().__new__(cls)
的使用
- 当你重写
__new__
方法时,通常会使用super().__new__(cls)
来确保正确地调用了基类的__new__
方法,这对于保持正常的对象创建过程是很重要的。 - 这种调用方式在自定义不可变数据类型或实现单例模式等高级用途时非常有用。
4、示例
假设我们有一个基类 Base
和一个继承自 Base
的子类 Sub
,而我们想要在 Sub
中重写 __new__
方法:
class Base:
def __init__(self):
print("Base __init__")
def __new__(cls):
print("Base __new__")
return super().__new__(cls)
class Sub(Base):
def __init__(self):
print("Sub __init__")
def __new__(cls):
print("Sub __new__")
return super().__new__(cls) # 调用基类的 __new__
instance = Sub()
在这个例子中,当我们创建 Sub
类的实例时,首先调用的是 Sub
类的 __new__
方法,接着 __new__
方法中的 super().__new__(cls)
调用了基类 Base
的 __new__
方法,从而确保了对象创建过程的正常进行。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献20条内容
所有评论(0)