Python 特殊方法__new__

__new__方法是Python中用于创建实例的特殊方法,它至少接受一个参数cls,代表当前类。通过重载__new__,不仅可以创建当前类的实例,还可以创建其他类的实例。本文详细介绍了__new__的语法、参数、返回值及使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

描述

语法和参数

返回值

使用示例

注意事项

补充


描述

特殊方法 __new__()用来创建一个实例,它至少有一个参数cls,代表当前类。默认情况下__new__()会创建当前类的实例,该方法也可以被重载,重载后也可以创建其他类的实例。

语法和参数

cls.__new__(cls, *args, **kwargs)
名称含义备注
cls当前类类名,不可省略的参数。
*args位置参数创建实例位置参数,调用可省略,声明方法时不可省略。
**kwargs关键字参数创建实例位置参数,调用可省略,声明方法时不可省略。

返回值

__new__方法返回创建好的对象实例。

使用示例

使用__new__方法创建实例:

class Fun(object):
    def __init__(self, fun):
        self.fun = fun

    def __new__(cls, *args, **kwargs):
        return object.__new__(Fun)


if __name__ == '__main__':
    f = Fun.__new__(Fun)
    print(type(f))

输出:

<class '__main__.Fun'>

注意事项

__new__()方法只是创建实例,此时拿到的实例并不能正常使用。一个实例需要被__init__()方法初始化后才可以被正常使用。也就是说,正常场景下,我们生成一个类的实例,Python先调用该类的__new()__方法创建一个实例,然后再调用__init__()方法初始化该实例。__new()__方法存在于object方法中,通常情况下不需要被重载。

补充

可以使用__new__方法创建出其它类的实例。在这种场景下,__new__方法创建后会调用对应类的__init__方法完成初始化:

class Fun(object):
    def __init__(self, fun):
        self.fun = fun

    def __new__(cls, *args, **kwargs):
        return Demo(*args, **kwargs)


class Demo(object):
    def __init__(self, d):
        self.demo = d


if __name__ == '__main__':
    f = Fun(1)
    print("type f:", type(f))
    print("f.demo:", f.demo)

运行结果:

type f: <class '__main__.Demo'>
f.demo: 1

可以看出,f不是Fun类的一个实例,而是Demo类的一个实例,拥有Demo类的字段。因为Fun类的__new__方法创建的是一个Demo类实例,而非Fun类本身。因此Fun.__new__方法在return后调用了Demo.__init__方法,以完成该实例的初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值