第4篇---Python设计模式之单例模式 +含代码实现+学Python的赶快进

单例模式概念

           保证一个类仅有一个实例,并提供一个访问他的全局访问点。

案例一:

class Singleton(object):
    __instance = None
    def __new__(cls, *args, **kwargs):  # 这里不能使用__init__,因为__init__是在instance已经生成以后才去调用的
        if cls.__instance is None:
            cls.__instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
        return cls.__instance

s1 = Singleton()
s2 = Singleton()
print s1
print s2

结果输出:

     解释:上述代码创建了一个类。。。类中有一个私有类变量instance, 另外有一个魔法方法, 这个方法判断当前这个类是否已经创建了对象, 如果没有,则调用超类object的__new__()方法创建对象, 若创建了,就将创建过的对象返回。。 确保了该类只能创建一个对象。。 。测试:我们实例化两个对象obj1和obj2, 输出它们的id,发现一样,说明这两个对象是同一个对象。。

    __new__()方法: 每个类创建对象时,首先调用__new__()方法,然后在调用__init__()方法进行初始化。

    因此可以这样描述__new__()和__init__()的区别, 在新式类中__new__()才是真正的实例化方法,为类提供了外壳制造出实力框架,然后调用该框架的构造方法__init__()使其丰满。 如果以建房子做比喻,__new__()类似构建房子的框架。 __init__()类似于装修。

 

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 12:19
点赞 评论 收藏
分享
昨天 11:21
门头沟学院 Java
总包48.5w,意想不到的价格
无情咸鱼王的秋招日记之薛定谔的Offer:R
点赞 评论 收藏
分享
牛客410815733号:这是什么电影查看图片
点赞 评论 收藏
分享
没有offer的小土豆:专业面试一般是分配面试官然后联系你面试 应该是还没给你分配对应面试官
点赞 评论 收藏
分享
评论
点赞
1
分享
牛客网
牛客企业服务