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

【_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__()可以用来改变实例的内部成员的值。

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_()】

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

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
__new__和__init__是Python中的两个特殊方法。 __new__方法在一个对象实例化时调用,返回一个新创建的实例对象。它是一个类级别的方法,并且在实例化之前被调用。__new__方法通常用于控制对象的创建过程,可以自定义对象的创建方式。 __init__方法在对象实例化后调用,用于初始化对象的属性。它是一个实例级别的方法,并且在__new__方法之后被调用。__init__方法用于设置对象的初始状态,可以对属性进行赋值或执行其他初始化操作。 通常情况下,我们会在__new__方法中创建对象,并在__init__方法中对对象进行初始化。但是也可以只使用其中的一个方法,根据具体需求来决定是否需要自定义对象的创建过程或初始化操作。 下面是一个示例代码,演示了__new__和__init__方法的使用: ```python class MyClass: def __new__(cls, *args, **kwargs): instance = super().__new__(cls) # 自定义对象创建过程 # 可以在这里进行一些额外的操作 return instance def __init__(self, *args, **kwargs): # 对象初始化操作 # 可以在这里对属性进行赋值 pass # 创建对象 obj = MyClass() ``` 在这个示例中,我们重写了MyClass类的__new__方法和__init__方法。在__new__方法中,我们使用了super()来调用父类的__new__方法,获得一个新的实例对象。在__init__方法中,我们可以对对象进行初始化操作。最后,通过实例化MyClass类来创建对象obj。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值