知行编程网知行编程网  2022-12-19 20:00 知行编程网 隐藏边栏  2 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Python之类方法、__new__方法和__init__方法介绍的相关知识,包括init之后必定触发的方法,以及init怎么用这些编程知识,希望对大家有参考作用。

要在编程语言中创建一个类,有一个术语用于构造函数。在Python中,大家通常认为__init__是一种构造方法,其实并不完全一样。在构造类中,有一个特殊的方法__new__,可以等同于构造方法。

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

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


类方法

class MyClass:
    @classmethod
    def test(cls):
        print(cls.__name__)
        
MyClass.test()
#输出 MyClass

在 MyClass 类中,测试方法是一个类方法。它传入的第一个参数是cls,其实就是MyClass类。你可以通过打印 cls.__name__ 来查看结果。可以通过类名直接调用类方法。方法名()。通常类方法是替代构造函数。


类方法的应用

>>> from datetime import datetime
>>> datetime.fromtimestamp(324234)
datetime.datetime(1970, 1, 5, 2, 3, 54)

如上所示,内置的datetime包中的fromtimestamp是一个类方法,可以通过多种方式构造datetime对象。


__new__方法

def __new__(cls, a):
    return super().__new__(cls)

__new__是类方法,所以第一个参数也是cls,其余参数为构造方法中需要的参数。通常__new__不需要定义,只有在元类编程中才需要,它可以控制类的生成过程。

__new__必须返回一个实例(instance),在__init__方法中传递给self参数,也就是实例变量。这里返回父类(对象)的 __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变量。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享