【Python】一文弄懂Python常见的_init_()、_call_()和_new_()方法

版权声明:转载请务必注明出处并注明“武汉AI算法研习” https://blog.csdn.net/qq_36931982/article/details/90339288

【_init_()】

说明:这是一个构造方法,一般用于直接初始化一个对象,同时对立面的参数进行赋值,后面调用内部方法可以直接通过{self.属性}获取其值

#【实验一】
class Callback(object):
    #构造方法
    def __init__(self):
        self.validation_data = 45
    def set_params(self, params):
        self.params = params
cb = Callback()
print(cb.validation_data)   #能得到45
#【实验二】
class Callback(object):
    #构造方法
    def __init__(self, data):
        self.validation_data = data
    def set_params(self, params):
        self.params = params
cb = Callback(123)
print(cb.validation_data)   #能得到123

在实验二部分更改为cb=Callback(),则运行会有报错

TypeError: __init__() missing 1 required positional argument: 'data'

说明,在_init_()定义的构造方法中,我们对对象类进行实例化的时候(其实python中实例化对象和初始化一起,其中_init_()方法中的self参数,就是在实例初始化后会通过self传递进入进行初始化属性参数),必须同时传递相应构造方法参数进行初始化其属性值。

扩展:self总是指调用时的类的实例。

【_call_()】

说明:可以将它们作为输入传递到其他的函数/方法中并调用他们,正如我们调用一个正常的函数那样,类中__call__()函数的意义正在于此。

其和_init_()方法区别

1. __init__()的作用是初始化某个类的一个实例。 
2. __call__()的作用是使实例能够像函数一样被调用,同时不影响实例本身的生命周期(__call__()不影响一个实例的构造和析构)。但是__call__()可以用来改变实例的内部成员的值。

扫描二维码关注公众号,回复: 6516803 查看本文章
class X(object):
    def __init__(self, a, b, range):
        self.a = a
        self.b = b
        self.range = range
    def __call__(self, a, b):
        self.a = a
        self.b = b
        print('__call__ with ({}, {})'.format(self.a, self.b))
    def __del__(self, a, b, range):
        del self.a
        del self.b
        del self.range
#实例化这个类
x_instance = X(1, 2, 3)
#通过_call_()来修改类属性值
x_instance(1,2)

得到结果:__call__ with (1, 5)

_call_方法的存在,让实例可以让类似函数方法那样被直接使用,但是有个前提就是必须这个类是实例化了的,在Python实际使用中必须先实例化对象

【_new_()】

说明:__new__()创建和返回一个新的对象。通俗说:是用来创建实例对象的。Python中存在于类中的构造方法__init__()负责将类实例化,而在__init__()执行之前,__new__()负责制造这样的一个实例对象,以便__init__()去让该实例对象更加的丰富(为其添加属性等)。

【_set_()】

说明:调用以将所有者类的实例instance设置为一个新值value.,调用相关属性时触发

【_get_()】

说明:调用相关属性时触发

【_delete_()】

说明:调用以删除所有者类的实例的属性

猜你喜欢

转载自blog.csdn.net/qq_36931982/article/details/90339288