首页 > 编程语言 > 详细

python 基础之单例模式

时间:2021-04-13 00:46:10      阅读:46      评论:0      收藏:0      [点我收藏+]

什么是单例模式?
单例模式是指类生成对象时,只能生成一个实例,其实这里的只能生成一个实例指的是只会分配一个
内存地址用于此类的实例生成,所有实例化的对象,最终都是返回的改地址所指向的对象。

我们来看一个单例的例子:

class Students:
    __singleStudent = None

    def __init__(self, name, age):
        super().__init__()
        self.name = name
        self.age = age

    def __new__(cls, name, age):
        if cls.__singleStudent is None:
            cls.__singleStudent = object.__new__(cls)
        return cls.__singleStudent

知识点:
1、python实例化的过程是先调用__new__()方法,生成一个对象并分配内存地址。然后再调用__init__()方法进行实例初始化
2、单例中,会有一个私有类变量,用于存放该类的实例。
3、__new__()方法先判断私有类变量是否为空,为空则调用object类的__new__()方法来生成一个对象(其实是重写父类__new__()方法并调用父类的该方法
     其中object.__new__(cls)的cls指的就是当前所在类本身),所以生成的是当前类的对象并返回。
4、然后调用当前类中的__init__()方法,并传入参数(__new__()接收的参数用于其__init__()初始化时使用).

s1 = Students("tom", 18)
print(s1, s1.name, s1.age)
s2 = Students("jerry", 20)
print(s1, s1.name, s1.age)
print(s2, s2.name, s2.age)

我们先实例化一个对象s1,然后查看s1对象和其属性name、age
然后再实例化一个对象s2,然后查看s2的对象和属性name、age
回过头看s1
执行结果:

D:\python\python.exe E:/practicemore/fff.py
<__main__.Students object at 0x000002B0583732E0> tom 18
<__main__.Students object at 0x000002B0583732E0> jerry 20
<__main__.Students object at 0x000002B0583732E0> jerry 20

我们可以看到,如论怎样实例化对象,都是相同的对象(相同的对象地址),再次实例化的属性会将旧的替换。这样就达到了至始至终只有一个实例的效果,
多次实例化改变的只是对象的属性。

python 基础之单例模式

原文:https://www.cnblogs.com/ctltest/p/14651064.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!