Python中new方法的详解

作者:小茗同学。 时间:2022-12-06 14:20:18 

new_ 方法是什么?

__new__方法其实就是创建对象的方法

new()方法是在类准备将自身实例化时调用。

一个类可以有多个位置参数和多个命名参数,而在实例化开始之后,在调用 init()方法之前,Python首先调用new()方法:


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

第一个参数cls是当前正在实例化的类。

如果要得到当前类的实例,应当在当前类中的new()方法语句中调用当前类的父类 的new()方法。

例如,如果当前类是直接继承自object,那当前类的new()方法返回的对象应该为:


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

return object.new(cls)

通常来说,当前类开始实例化时,new()方法会返回cls(cls指代当前类)的实例,然后该类的init()方法作为构造方法会接收这个实例(即self)作为自己的第一个参数,然后依次传入new ()方法中接收的位置参数和命名参数。

注意:如果new()没有返回cls(即当前类)的实例,那么当前类的init()方法是不会被调用的。

如果new()返回其他类的实例,那么只会调用被返回的那个类的构造方法。


class Foo(object):
def init(self, *args, **kwargs):
pass
def new(cls, *args, **kwargs):
return object.new(Stranger, *args, **kwargs)

class Stranger(object):
pass

foo = Foo()
print(type(foo))
》》》》<class ‘main.Stranger'>

因此可以这么描述new()和ini()的区别,在新式类中new()才是真正的实例化方法,为类提供外壳制造出实例框架,然后调用该框架内的构造方法init()使其丰满。

如果以建房子做比喻,new()方法负责开发地皮,打下地基,并将原料存放在工地。

而init()方法负责从工地取材料建造出地皮开发招标书中规定的大楼,init()负责大楼的细节设计,建造,装修使其可交付给客户。

来源:https://blog.csdn.net/weixin_44279511/article/details/85317592

标签:python,new
0
投稿

猜你喜欢

  • SQL Server 2000数据库FOR XML查询概述

    2008-12-09 14:49:00
  • Django原生sql也能使用Paginator分页的示例代码

    2023-11-09 10:00:06
  • python爬取淘宝商品详情页数据

    2021-05-28 14:38:08
  • ASP怎么谈到应用到类的?

    2008-03-10 11:21:00
  • javascript 动态插入技术

    2009-12-14 20:50:00
  • 如何利用触发器实现两个数据库间的同步

    2009-01-06 11:26:00
  • Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法

    2021-02-14 00:18:22
  • 详细讲解MySQL数据库对文件操作的封装

    2008-12-17 16:08:00
  • python 函数、变量中单下划线和双下划线的区别详解

    2021-06-29 11:32:33
  • python读取Excel表格文件的方法

    2023-07-24 01:17:14
  • JS 替换和时间插件的结合使用方法

    2013-08-19 16:50:31
  • Python实现根据日期获取当天凌晨时间戳的方法示例

    2023-08-04 14:16:46
  • Python用Pillow(PIL)进行简单的图像操作方法

    2022-06-10 10:29:49
  • Python的Pillow库进行图像文件处理(图文详解)

    2023-10-04 04:02:23
  • 仿6room网站图片链接效果

    2007-06-21 13:59:00
  • python中plt.imshow与cv2.imshow显示颜色问题

    2023-12-13 10:47:54
  • css中的类和伪类

    2008-06-12 13:12:00
  • ASP教程:制作登陆验证页面程序

    2008-10-23 15:00:00
  • Python跨文件全局变量的使用技巧

    2023-09-17 00:00:31
  • php中Ctype函数用法详解

    2023-06-19 01:43:13
  • asp之家 网络编程 m.aspxhome.com