python设计模式:单例模式代码示例

单例模式

单例模式(Singleton Pattern)的核心作用是确保一个类只有一个实例,并且提供一个访问该实例的全局访问点。
单例模式只生成一个实例对象,减少了对系统资源的开销。当一个对象的产生需要比较多的资源,如读取配置文件、产生其他依赖对象时,可以产生一个“单例对象”,然后永久驻留内存中,从而极大的降低开销。
单例模式有多种实现的方式,我们这里推荐重写__new__()的方法。

#单例模式
class MySingleton:
	__obj = None
	__init_flag = True
	def __new__(cls, *args, **kwargs):
		if cls.__obj == None:
			cls.__obj = object.__new__(cls)
		return cls.__obj
	def __init__(self,name):
		if MySingleton.__init_flag:
			print("init....")
			self.name = name
			MySingleton.__init_flag = False
			
a = MySingleton("aa")
print(a)
b = MySingleton("bb")
print(b)

运算结果:

init....
<__main__.MySingleton object at 0x01E15610>
<__main__.MySingleton object at 0x01E15610>

补充:可变参数

*args**kwargs 是用于在 Python 函数或方法中处理可变数量的参数的特殊语法。

  • *args 是用于传递不定数量的位置参数(Positional Arguments)。在函数定义中,*args 表示可以接受任意数量的位置参数,并将它们作为一个元组(tuple)传递给函数。调用函数时,可以传递任意数量的位置参数,它们将被打包成一个元组传递给 *args

例如,以下函数接受任意数量的位置参数并将它们相加:

def add_numbers(*args):
    total = 0
    for num in args:
        total += num
    return total

调用方式示例:

result = add_numbers(1, 2, 3, 4)  # result = 10
result = add_numbers(10, 20, 30, 40, 50)  # result = 150
  • **kwargs 是用于传递不定数量的关键字参数(Keyword Arguments)。在函数定义中,**kwargs 表示可以接受任意数量的关键字参数,并将它们作为一个字典(dictionary)传递给函数。调用函数时,可以传递任意数量的关键字参数,它们将被打包成一个字典传递给 **kwargs

例如,以下函数接受任意数量的关键字参数并打印它们的键值对:

def print_kwargs(**kwargs):
    for key, value in kwargs.items():
        print(f"{
      
      key}: {
      
      value}")

调用方式示例:

print_kwargs(name="John", age=30, city="New York")
# 输出:
# name: John
# age: 30
# city: New York

需要注意的是,*args**kwargs 可以与其他参数一起使用,但通常放在参数列表的最后。例如:

def example_func(arg1, arg2, *args, **kwargs):
    # 函数体

在函数定义中,参数的顺序应为:必需参数,*args,关键字参数,**kwargs。这样,函数可以接受位置参数、不定数量的位置参数、关键字参数以及不定数量的关键字参数。

猜你喜欢

转载自blog.csdn.net/a772304419/article/details/132891602