在编程语言中创建一个类,有构造方法这样的一个术语。而在Python中,通常大家都认为__init__是构造方法,其实并不完全等同。在构建类中,有一个特殊的方法__new__,这个才能等同为构造方法。

__new__是一个类方法,我们在定义一个类方法时需要在函数前打上@classmethod装饰器,而__new__不需要,因为它经过特殊处理。为了理解__new__方法,我们先来看看类方法是什么。

类方法class MyClass:

@classmethod

def test(cls):

print(cls.__name__)

MyClass.test()

#输出 MyClass

在MyClass类中,test方法就是类方法,它传入第一个参数为cls,其实就是MyClass类,打印cls.__name__可以看到结果。类方法可以直接 类名.方法名()调用。通常类方法是备选构造方法。

类方法的应用>>> from datetime import datetime

>>> datetime.fromtimestamp(324234)

datetime.datetime(1970, 1, 5, 2, 3, 54)

如上所示,内置的datetime包中的fromtimestamp就是类方法,可以从多种方式构造出datetime对象。

相关推荐:《Python相关教程》

__new__方法def __new__(cls, a):

return super().__new__(cls)

__new__是类方法,所以第一个参数也是cls,剩下的参数就是构造方法里需要的参数了。通常__new__都不需要定义,在元类编程中才需要,它可以控制类的生成过程。

__new__必须返回一个实例(instance),传入到__init__方法中的self参数,也就是实例变量。这里返回父类(object)的__new__方法用来创建一个新的实例。相当于obj = object.__new__(MyClass)

obj = MyClass()

#obj是实例,上面两个方式等同

其中,MyClass是类,obj是实例(instance)

__init__方法

__new__是构造方法,那么__init__就是初始化函数,它负责将变量绑定到实例中,更新实例的__dict__字典。其中第一个参数self就是__new__的返回值,是类的实例。__new__方法先于__init__方法执行。def __init__(self, a):

self.a = a

结合使用class MyClass:

def __new__(cls, a):

return super().__new__(cls)

def __init__(self, a):

self.a = a

obj = MyClass(3)

print(obj.a)

要点

1.__new__是构造方法,__init__是初始化函数。

2.__new__通常不需要手动定义,一般在元类编程中使用,控制类的生成过程。

3.__new__第一个被执行,然后执行__init__绑定实例变量。

4.__new__必须有返回值,返回值是该类的实例,它会被__init__函数接收,通常叫做self变量。

python什么时候要构造方法init_Python之类方法、__new__方法和__init__方法介绍相关推荐

  1. Python中如何使用构造方法定义类

    每个类都有一个默认的__init__()方法,如果在定义类时显式地定义了__init__()方法,则创建对象时Python解释器会调用显式定义的__init__()方法;如果定义类时没有显式定义__i ...

  2. 什么是python中子类父类_零基础入门:python中子类继承父类的__init__方法实例

    前言: 今天为大家带来的内容是零基础入门:python中子类继承父类的__init__方法实例!具有不错的参考意义,希望在此能够帮助到各位!(喜欢的话记得点赞转发关注不迷路哦) 使用Python写过面 ...

  3. Python面向对象——面向对象介绍、实现面向对象编程、定义类、再调用类产生对象、总结__init__方法、查找顺序

    文章目录 面向对象介绍 实现面向对象编程 一:先定义类 二:再调用类产生对象 总结__init__方法 查找顺序 面向对象介绍 ''' 面向过程:核心是"过程"二字过程的终极奥义就 ...

  4. python中的继承的初始化_python中子类继承父类的__init__方法实例

    前言 使用Python写过面向对象的代码的同学,可能对__init__方法已经非常熟悉了,__init__方法在类的一个对象被建立时,马上运行.这个方法可以用来对你的对象做一些你希望的 初始化 . 注 ...

  5. Python中__init__方法有什么作用

    Python中__init__方法有什么作用 当使用类名()的方法去创建对象的时候 python解释器会自动调用__init__方法 因此可以在__init__方法中做一些初始化的设定 在每次创建新对 ...

  6. python类继承中构造方法_第8.3节 Python类的__init__方法深入剖析:构造方法与继承详解...

    第8.3节Python类的__init__方法深入剖析:构造方法与继承详解 一.    引言 上两节介绍了构造方法的语法及参数,说明了构造方法是Python的类创建实例后首先执行的方法,并说明如果类没 ...

  7. Python基础day08【面向对象(类、对象、属性)、魔方方法(init、str、del、repr)】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员]   目录 0.复习 1.类外部添加和获取对象属性 2.类内部操作属性 3.魔法方法 3.1.__i ...

  8. 27、Python 面向对象(创建类、创建实例对象、访问属性、内置类属性、对象销毁、类的继承、方法重写、基础重载方法、运算符重载、类属性与方法、下划线双下划线)

    27Python面向对象(Python2) Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. ...

  9. python locust 能压测数据库_python locust 性能测试:HOOKS钩子方法

    为locust中不同类型的事件,提供的钩子方法: from locust import TaskSet, task, events, Locust from locust.clients import ...

最新文章

  1. R语言使用ggplot2包使用geom_dotplot函数绘制分组点图(自定义分组颜色、主题)实战(dot plot)
  2. 美团点评:基于Druid的Kylin存储引擎实践
  3. 外包程序员入职蚂蚁金服被质疑,网友:人生污点
  4. ios android cpu占用率,iPhone-iOS-从应用程序获取CPU使用率
  5. 我想做产品,实现一个非常优秀的电脑桌面记事本加闹钟
  6. 538.把二叉搜索树转换为累加树(结合自己的理解解释一下别人题解的递归部分)
  7. 使用Python迭代字符串中的每个字符
  8. Vue数据绑定和响应式原理
  9. this 自引用指针
  10. POJ 1573机器人走迷宫
  11. c++ poco 使用mysql中文乱码问题
  12. 使用Java 自身Timer API实现定时器的方法
  13. 图片公式转word公式
  14. python浪漫代码表白npy_【师大表白墙】表白wdl小姐姐,一眼看过去就记住的女孩子,笑起来时眼睛里有星星在闪烁~...
  15. 【Linux】Linux的进程调度
  16. extern C 解析
  17. C# WinForm 功能代码备忘-刘欣
  18. windows vista本该有却没有的功能
  19. Win7文件夹怎么加密
  20. codevs 5960 信使

热门文章

  1. 后台登录密码绕过+sql注入+一句话木马 实验演示(盾灵)
  2. Cocos2dx-背景无限循环播放
  3. 2021水利水电安全员考试及(安全员)模拟考试案例题答案解析
  4. 手机开机linux企鹅,修改linux内核的开机图片(小企鹅)
  5. 动态照片怎么制作?推荐几种操作简单的制作方法
  6. 2004年度最欠“扁”短信集锦
  7. 说服审稿人,只需牢记这 8 大返修套路!
  8. 非专业人士观点(1)性价比无法比
  9. 什么!Redis不会用!看完这个你就是Redis大牛了!
  10. c语言中秋节编程怎么打,细数中秋节的几种过法,你属于哪一种?