教程集 www.jiaochengji.com
教程集 >  Python编程  >  Python入门  >  正文 Python之类方法、__new__方法和__init__方法介绍

Python之类方法、__new__方法和__init__方法介绍

发布时间:2021-12-14   编辑:jiaochengji.com
教程集为您提供Python之类方法、,,new,,方法和,,init,,方法介绍等资源,欢迎您收藏本站,我们将为您提供最新的Python之类方法、,,new,,方法和,,init,,方法介绍资源

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

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

类方法

<pre class="brush:php;toolbar:false">class MyClass:     @classmethod     def test(cls):         print(cls.__name__)          MyClass.test() #输出 MyClass</pre>

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

类方法的应用

<pre class="brush:php;toolbar:false">>>> from datetime import datetime >>> datetime.fromtimestamp(324234) datetime.datetime(1970, 1, 5, 2, 3, 54)</pre>

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

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

__new__方法

<pre class="brush:php;toolbar:false">def __new__(cls, a):     return super().__new__(cls)</pre>

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

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

<pre class="brush:php;toolbar:false">obj = object.__new__(MyClass) obj = MyClass() #obj是实例,上面两个方式等同</pre>

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

__init__方法

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

<pre class="brush:php;toolbar:false">def __init__(self, a):     self.a = a</pre>

结合使用

<pre class="brush:php;toolbar:false">class MyClass:     def __new__(cls, a):         return super().__new__(cls)     def __init__(self, a):         self.a = a obj = MyClass(3) print(obj.a)</pre>

要点

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

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

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

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

您可能感兴趣的文章:
Python之类方法、__new__方法和__init__方法介绍
一文读懂Python中__new__和__init__的区别与联系
python如何实现单例模式
Python中如何使用_new_实现单例模式
python3类方法使用时需要注意什么?
python3中新类如何继承?
python魔法方法有什么用
python单例模式是什么意思
python怎么实现单例模式
Python如何利用动态属性处理JSON数据源

[关闭]
~ ~