单例设计模式 | 手把手教你入门Python之六十一-阿里云开发者社区

开发者社区> Python学习站> 正文

单例设计模式 | 手把手教你入门Python之六十一

简介: 确保某⼀个类只有⼀个实例,⽽且⾃⾏实例化并向整个系统提供这个实例,这个类称为单例类,单例模式是⼀种对象创建型模式。

上一篇:类方法和静态方法的使用 | 手把手教你入门Python之六十
下一篇:类属性案例练习 | 手把手教你入门Python之六十二

本文来自于千锋教育在阿里云开发者社区学习中心上线课程《Python入门2020最新大课》,主讲人姜伟。

单例设计模式

__new__和__init__⽅法

class A(object):
    def __init__(self):
        print("这是 init ⽅法")

    def __new__(cls):
        print("这是 new ⽅法")
        return object.__new__(cls)
        
A()

总结

  • __new__ ⾄少要有⼀个参数cls,代表要实例化的类,此参数在实例化时由Python解释器⾃动提供
  • __new__ 必须要有返回值,返回实例化出来的实例,这点在⾃⼰实现 __new__ 时要特别注意,可以return⽗类 __new__ 出来的实例,或者直接是object的 __new__ 出来的实例
  • __init__ 有⼀个参数self,就是这个 __new__ 返回的实例, __init____new__ 的基础上可以完成⼀些其它初始化的动作, __init__ 不需要返回值

单例设计模式

举个常⻅的单例模式例⼦,我们⽇常使⽤的电脑上都有⼀个回收站,在整个操作系统中,回收站只能有⼀个实例,整个系统都使⽤这个唯⼀的实例,⽽且回收站⾃⾏提供⾃⼰的实例。因此回收站是单例模式的应⽤。

确保某⼀个类只有⼀个实例,⽽且⾃⾏实例化并向整个系统提供这个实例,这个类称为单例类,单例模式是⼀种对象创建型模式。

# 实例化⼀个单例
class Singleton(object):
    __instance = None
    __is_first = True

    def __new__(cls, age, name):
        if not cls.__instance:
            cls.__instance = object.__new__(cls)
        return cls.__instance

    def __init__(self, age, name):
        if self. __is_first: # 不会再创建第⼆个对象
            self.age = age
            self.name = name
            Singleton. __is_first = False


a = Singleton(18, "张三")
b = Singleton(28, "张三")

print(id(a))
print(id(b))

print(a.age) # 18
print(b.age) # 18

a.age = 19
print(b.age)

image.png

配套视频

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
Python学习站
使用钉钉扫一扫加入圈子
+ 订阅

Python学习资料大全,包含Python编程学习、实战案例分享、开发者必知词条等内容。

官方博客
官网链接