python new函数,Python new方法

Python new方法

Python new方法教程

__new__() 方法是一种负责创建 __new__() 的实现之前,都会先使用 super 调用父类的 new 方法。

Python new方法详解

语法

def new(cls, *args, **kwargs):

说明

new 方法可以有多个位置参数和多个命名参数。

Python new方法作用

Python 中的 __new__() 方法是在新式类中新出现的方法,Python 中的构造方法 __init__() 负责将类实例化,而在 __init__() 执行之前,__new__() 负责制造这样的一个实例对象,以便 __init__() 去让该实例对象更加的丰富(为其添加属性等)。

同时,__new__() 方法还决定是否要使用该 __init__() 方法,因为 __new__() 可以调用其他类的构造方法或者直接返回别的对象来作为本类的实例。

案例

new方法会在init方法之前被调用

Python 中的 new 方法会在 init 方法之前被调用

print("嗨客网(www.haicoder.net)")

class Person(object):

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

print("call __new__()")

instance = super().__new__(cls)

return instance

def __init__(self):

print("call __init__()")

p = Person()

程序运行后,控制台输出如下:

1d73cd3f028d195d90609346146ac32a.png

我们创建了一个 Person 类,Person 类继承自 __new__ 方法和 __init__ 方法。

最后,我们实例化了 Person 类,我们发现,__new__ 方法会在 __init__ 方法之前被调用。

使用new方法创建其他类实例

使用new方法可以创建其他类实例

print("嗨客网(www.haicoder.net)")

class Person(object):

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

print("call Person __new__()")

instance = super().__new__(cls)

return instance

class Student(object):

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

print("call Student __new__()")

instance = object.__new__(Person, *args, **kwargs)

return instance

stu = Student()

print("Type stu =", type(stu))

程序运行后,控制台输出如下:

453ecbdaa669554ce62967acb70938fb.png

我们创建了一个 Person 类和一个 Student 类,并且都重写了它们的 __new__ 方法,在 Student 类的 __new__ 方法里,我们调用的 __new__ 的第一个参数传递的是 Person 类。

因此,我们在实例化 Student 类实例时,其实创建的是 Person 类的实例,而不是 Student 类的实例。

Python new方法总结

Python 中的 __new__() 方法是一种负责创建类实例的静态方法,且该方法会在 init() 初始化方法之前被调用。一般情况下,我们在覆写 __new__() 的实现之前,都会先使用 super 调用父类的 new 方法。

Python 中的 __new__() 方法是在新式类中新出现的方法,Python 中的构造方法 __init__() 负责将类实例化,而在 __init__() 执行之前,__new__() 负责制造这样的一个实例对象,以便 __init__() 去让该实例对象更加的丰富(为其添加属性等)。

同时,__new__() 方法还决定是否要使用该 __init__() 方法,因为 __new__() 可以调用其他类的构造方法或者直接返回别的对象来作为本类的实例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值