程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

python面试(5)

函数(0)

标签  

函数(0)

列表(0)

日期归档  

2023-06(2)

一道python经典面试题

发布于2019-03-03 17:49     阅读(11154)     评论(0)     点赞(78)     收藏(103)


Python面试理解__new__和__init__的区别


很多同学都以为Python中的__init__是构造方法,但其实不然,Python中真正的构造方法是__new__。__init__和__new__有什么区别?本文就来探讨一下。

我们先来看一下__init__的用法

上面的代码会输出如下的结果

那么我们思考一个问题,Python中要实现Singleton怎么实现,要实现工厂模式怎么实现?

用__init__函数似乎没法做到呢~

实际上,__init__函数并不是真正意义上的构造函数,__init__方法做的事情是在对象创建好之后初始化变量。真正创建实例的是__new__方法。

我们来看下面的例子

上面的代码输出如下的结果

上面的代码中实例化了一个Person对象,可以看到__new__和__init__都被调用了。__new__方法用于创建对象并返回对象,当返回对象时会自动调用__init__方法进行初始化。__new__方法是静态方法,而__init__是实例方法。

好了,理解__new__和__init__的区别后,我们再来看一下前面提出的问题,用Python怎么实现Singleton,怎么实现工厂模式?

先来看Singleton

上面的代码输出


可以看到s1和s2都指向同一个对象,实现了单例模式。

再来看下工厂模式的实现

上面的代码输出



所属网站分类: 技术文章 > 博客

作者:皇后娘娘别惹我

链接:https://www.pythonheidong.com/blog/article/328/8cd5f1dbf610aaf30c54/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

78 0
收藏该文
已收藏

评论内容:(最多支持255个字符)