【强基06】new和init魔法方法的调用顺序和使用规则

技术【强基06】new和init魔法方法的调用顺序和使用规则 【强基06】__new__和__init__魔法方法的调用顺序和使用规则调用顺序:
类里面__new__ 方法的执行优先级高于__init_

[强基06] _ _ new _ _和__init__ magic methods的调用顺序和使用规则

调用顺序:

类中__new__方法的执行优先级高于__init__方法。当类体代码运行时,首先执行__new__方法的函数体代码,然后执行__init__方法的函数体代码。

使用规则:

__init__方法,主要用于设置类的初始化参数。

__new__方法,主要用于通过类实例化来干预生成对象的过程,从而达到一定的目的;

示例:单一模式

了解流行的单一示例,即无论一个类被调用多少次,只能创建一个实例对象。

(每次实例化一个类,它都会创建一个新的对象。如果要求类只能实例化一次,也就是说,即使多次调用,它仍然使用同一个对象,这需要通过singleton模式来设置。)

在下面写一个单例模式来控制对象的创建。无论类被调用多少次,都使用同一个对象。

#单一模式

我的班级:

_ _实例=无

def __new__(cls,*args,**kwargs):

#确定该类是否创建了对象。

如果cls。__instance:

打印(满足条件,以前创建的对象,直接返回以前创建的对象)

返回cls。_ _实例

else:

打印(该类以前没有创建过对象)

#开始创建对象

obj=super()。__新__(cls)

#将__instance的值修改为创建的对象。

cls。_ _实例=obj

#返回对象

返回对象

m1=Myclass()

m2=Myclass()

m3=Myclass()

打印(m1、m2、m3)

打印(id(m1)、id(m2)、id(m3))

''打印结果如下:

类以前从未创建过对象。

如果满足条件,先前创建的对象将直接返回到先前创建的对象。

如果满足条件,先前创建的对象将直接返回到先前创建的对象。

__main__。B240 __main__处的Myclass对象。B240 __main__处的Myclass对象。B240处的Myclass对象

43168320 43168320 43168320

'''

#单一模式简化代码

#思维安排:

#如果变量__instance没有值,则创建一个对象并分配它以保存它;

#如果变量__instance有值,将直接返回之前保存的对象;

我的班级1:

_ _实例=无

def __new__(cls,*args,**kwargs):

如果不是cls。__instance:

obj=super()。__新__(cls)

cls。_ _实例=obj

返回cls。_ _实例

m1=Myclass1()

m2=Myclass1()

m3=Myclass1()

打印(m1、m2、m3)

打印(id(m1)、id(m2)、id(m3))

''打印结果如下:

B128处的_ _ main _ _ _ . myclass 1对象B128处的_ _ main _ _ _ . myclass 1对象B128处的_ _ myclass 1对象

43168040 43168040 43168040

'''

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/149515.html

(0)

相关推荐

  • relationship,relationship的翻译

    技术relationship,relationship的翻译relationship 英[rɪˈleɪʃnʃɪp] 美[rɪˈleʃənˌʃɪp] n. 关系; 联系; 浪漫关系; 血缘关系;

    生活 2021年10月25日
  • C++怎么将帮助函数和它们支持的类放在同一命名空间

    技术C++怎么将帮助函数和它们支持的类放在同一命名空间这篇文章主要讲解了“C++怎么将帮助函数和它们支持的类放在同一命名空间”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“

    攻略 2021年11月25日
  • 鳄怎么读,alligator怎么读

    技术鳄怎么读,alligator怎么读展开全部1鳄怎么读、alligator英文读音:alligator 英[ˈælɪgeɪtə(r)];美[ˈælɪˌɡetɚ] 。 2、意思:短吻鳄;短吻鳄皮革;鳄口式工具;鳄鱼般的

    生活 2021年10月26日
  • JavaScript中var与let的区别是什么

    技术JavaScript中var与let的区别是什么本篇文章给大家分享的是有关JavaScript中var与let的区别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小

    攻略 2021年12月8日
  • Go语言中go fmt命令怎么用

    技术Go语言中go fmt命令怎么用这篇文章主要为大家展示了“Go语言中go fmt命令怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Go语言中go fmt命令怎么用”

    攻略 2021年11月21日
  • spark structstream 性能(sparkudf使用缓存数据吗)

    技术Spark UDF变长参数的方法是什么这篇文章主要介绍“Spark UDF变长参数的方法是什么”,在日常操作中,相信很多人在Spark UDF变长参数的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操

    攻略 2021年12月14日