Python继承+单例模式

两个类如果需要相同的初始化,而且都是单例模式,但是又有自己的区别,那么都继承一个基类,子类自己做单例模式。

比如像连两个地址的MySQL,基本的查询、插入等方法都可以写到基类里,两个地址的MySQL都继承该基类同时可以有自己的单例模式,互不影响。

# 基类
class People(object):
    def __init__(self, arg="Single"):
        print(arg)

    def speak(self):
        print("hello")


# 继承基类
class Teacher(People):
    
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,可以使用装饰器或元类来手动实现单例模式。下面是分别使用装饰器和元类实现单例模式的示例代码: 1. 使用装饰器实现单例模式: ```python def singleton(cls): instances = {} def wrapper(*args, **kwargs): if cls not in instances: instances[cls] = cls(*args, **kwargs) return instances[cls] return wrapper @singleton class SingletonClass: def __init__(self, name): self.name = name # 使用示例 a = SingletonClass("Instance A") b = SingletonClass("Instance B") print(a.name) # 输出:Instance A print(b.name) # 输出:Instance A print(a is b) # 输出:True ``` 在上述示例中,`singleton` 是一个装饰器函数,它接受一个类作为参数,并返回一个包装函数 `wrapper`。`wrapper` 函数会判断该类是否已经有实例存在,如果不存在,则创建一个新的实例并保存在 `instances` 字典中,然后返回该实例。如果已经存在实例,则直接返回已有的实例。 2. 使用元类实现单例模式: ```python class SingletonMeta(type): _instances = {} def __call__(cls, *args, **kwargs): if cls not in cls._instances: cls._instances[cls] = super().__call__(*args, **kwargs) return cls._instances[cls] class SingletonClass(metaclass=SingletonMeta): def __init__(self, name): self.name = name # 使用示例 a = SingletonClass("Instance A") b = SingletonClass("Instance B") print(a.name) # 输出:Instance A print(b.name) # 输出:Instance A print(a is b) # 输出:True ``` 在上述示例中,`SingletonMeta` 是一个元类,它继承自 `type`。通过在 `SingletonClass` 类中指定 `metaclass=SingletonMeta`,可以将 `SingletonMeta` 设置为该类的元类。在元类的 `__call__` 方法中,判断是否已经存在该类的实例,如果不存在,则创建一个新的实例并保存在 `_instances` 字典中,然后返回该实例。如果已经存在实例,则直接返回已有的实例。 以上是使用装饰器和元类两种常见的手动实现单例模式的方法。这些方法可以确保只有一个实例存在,并提供了全局访问点来获取该实例。 希望这个示例对你有所帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值