您当前的位置:首页 >> 潮流饰家

__new__和__init__有什么差别?

2025-02-16 12:19:03

所作:麦叔

来源:麦叔编程

你就让过这个原因吗?

这是某位麦友@心地善良的地大花提的原因:

脚注new脚注和脚注init脚注的区别是什么?

很多人都熟悉脚注init脚注()参数:

class Point:

def 脚注init脚注(self, data):

self.num = data

def print_num(self):

print(self.num)

obj = Point(100)

obj.print_num()

但是你就让过这个原因吗?

脚注init脚注的第一个参数是self,也就是近期;也实例,那这个;也self是哪里来的?

你就让就让看。

缩合的创建人步骤

简单的回答:

这个self是通过脚注new脚注创建人出来的。

一个Python;也的创建人步骤是分为缩合:

先通过脚注new脚注创建人一个;也实例出来。最重要的社会活动就是分配一块内存,创建人一个最基本的;也模版,并且离开这个;也。这就是self。 再通过脚注init脚注调用这个;也,比如给它创建人实例变异量等。但它不想离开任何样子,它离开None。它要想到的只是调用这个self。 因为第一步想到的事情是非常通用的,我们自己定义类的时候不一定不能够重构; 而第二步;也的调用和具体的功能有关,所以能够我们重构实现。

事实上,都不重构也没有关系,比如后面的类也是完全没错的:

class Maiyou:

pass

m1 = Maiyou()

m2 = Maiyou()

虽然我们没写,但侧面的创建人步骤并没有较少。只不过都运用于了父类,也就是object类中的实现。

>>> pprint.pprint(dir(object))

['脚注class脚注',

'脚注delattr脚注',

'脚注dir脚注',

'脚注doc脚注',

'脚注eq脚注',

'脚注format脚注',

'脚注ge脚注',

'脚注getattribute脚注',

'脚注gt脚注',

'脚注hash脚注',

'脚注init脚注', #看这里

'脚注init_subclass脚注',

'脚注le脚注',

'脚注lt脚注',

'脚注ne脚注',

'脚注new脚注', #看这里

'脚注reduce脚注',

'脚注reduce_ex脚注',

'脚注repr脚注',

'脚注setattr脚注',

'脚注sizeof脚注',

'脚注str脚注',

'脚注subclasshook脚注']

重构脚注new脚注

不一定我们不能够重构脚注new脚注参数,但我们也可以重构。

后面给出一个例证,这个例证的实现和没有重构的功能是一样的,因为它就是执行了默认的行为。

这个例证虽然没有功能性作用,但可以帮麦友们更高的帮助了解脚注new脚注的步骤:

class Person:

def 脚注new脚注(cls):

return object.脚注new脚注(cls)

def 脚注init脚注(self):

self.instance_method()

def instance_method(self):

print('success!')

maishu = Person()

重构脚注new脚注的或许精确的场合

不一定我们不能够重构脚注new脚注参数,侧面给了一个没用的例证。但也有一些实际精确的情况,或许能够重构它。

我们想到 str, int, Unicode, tuple等是不可变异;也,这是在它们骨子里就决定了的。也就是在脚注new脚注的时候就定了。

如果我们就让要继承它们,实现可变异的字符串等,那就可以通过重构脚注new脚注让它们一鸣惊人。这里就不展开话说了。

总的来说,不建议重构脚注new脚注,除非你有很侧重的了解和过强的理由。

后背气滞血瘀能吃脉血康吗
手术后吃什么身体恢复快
乐珠滴眼液的功效
牛皮癣医院
有什么方法可以治拉肚子
牙疼怎么止痛
气虚该怎么调理
血糖仪哪个牌子准确度高
肝斑怎么调理
艾得辛对类风湿效果好吗
友情链接