【python】之设计模式【未完】

前言

第1章 简介

1.1 面向对象相关

1.2 面相对象的3个设计设计原则

第2章–单例设计模式【创建型模式】

2.1 理解单例1

2.1.1实现单例 –代码解读

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 单例模式
class Singleton(object):
def __new__(cls): # __new__是在实例化的时候调用的方法
""" 判断cls类是否具有instance实例属性,如果没有就创建一个实例出来"""
if not hasattr(cls, 'instance'): # 如果cls类本身 没有实例
"""
这里比较难理解,
super(Singleton, cls)会返回Singleton类的父类object的对象
super(Singleton, cls).__new__(cls)也就是父类object的对象的__new__方法,
用父类的对象创建一个对象传递给cls(本类)
然后本类cls.instance就=父类对象创建出来的对象,
"""
cls.instance = super(Singleton, cls).__new__(cls) # 那类的实例就等于

return cls.instance # 如果有就直接返回这个实例cls.instance类的实例

s = Singleton()
print("Object created", s) # Object created <__main__.Singleton object at 0x7ffbc212fbe0>

s1 = Singleton()
print("Object created", s1) # Object created <__main__.Singleton object at 0x7ffbc212fbe0>
# 在 Python 中,对象的实例化过程包括两个步骤:__new__() 和 __init__()。__new__() 方法负责创建实例对象,而 __init__() 方法负责初始化实例。
# 在这个代码段中,super(Singleton, cls).__new__(cls) 使用了 super() 内置函数来调用父类 object 的 __new__() 方法。通过传递 Singleton 类和 cls 参数,super(Singleton, cls) 返回了一个代表父类的特殊对象。

# 然后,通过调用 __new__() 方法,父类 object 创建了一个新的实例对象。这个新的实例对象是通过传递 cls 参数(即 Singleton 类本身)给 __new__() 方法来创建的。

# 最后,将这个新创建的实例对象赋值给类属性 instance,以便后续的调用可以返回同一个实例。

# 换句话说,这行代码的目的是在首次实例化时创建一个新的实例,并将其赋值给类属性 instance,以便后续的实例化都返回该实例。

问:如何实现单例模式:

答:通过在定义类魔法方法__–new–__里面,做一个判断,判断 当前类是否存在实例化对象也就是cls.instance 如果有,就直接返回这个实例化对象,如果没有则通过super调用父类的new方法来创建一个实例 cls.instance = super(Singleton, cls).new(cls)) 然后再返回出去

UML类图简单学习笔记


【python】之设计模式【未完】
http://example.com/2024/02/23/699python设计模式/
作者
Wangxiaowang
发布于
2024年2月23日
许可协议