码迷,mamicode.com
首页 > 其他好文 > 详细

单例实现方式

时间:2018-06-03 10:53:02      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:instance   usr   strip()   tle   single   bsp   mysql   type   方式   

#!/usr/bin/env python
# encoding: utf-8  
# Date: 2018/6/3

# 实现方式一:
# 基于元类控制类的实例行为,单例模式

# class MySQL:
#     __instance=None
#
#     def __init__(self):
#         self.host = ‘127.0.0.1‘
#         self.port = 3306
#
#     #单例创建类
#     @classmethod
#     def singleton(cls):
#         if not cls.__instance:
#             obj=cls()
#             cls.__instance = obj
#         return cls.__instance
#
#     def conn(self):
#         pass
#
#     def execute(self):
#         pass
#
#
# # obj1 = MySQL()
# # obj2 = MySQL()
# #
# # print(obj1)
# # print(obj2)
#
# # 单例产生类
# obj1 = MySQL.singleton()

# 实现方式二:元类方式


class Mymeta(type):
    def __init__(self, class_name, class_bases, class_dic):
        if not class_name.istitle():
            raise TypeError(‘类名的首字母必须大写‘)
        if ‘__doc__‘ not in class_dic or not class_dic[‘__doc__‘].strip():
            raise TypeError(‘必须有注释,且注释不能为空‘)
        super(Mymeta, self).__init__(class_name, class_bases, class_dic)
        self.__instance = None

    def __call__(self, *args, **kwargs):  # obj = Chinese(‘egon‘, age=18)
        if not self.__instance:
            obj = object.__new__(self)
            self.__init__(obj)
            self.__instance = obj
        return self.__instance


class Mysql(object, metaclass=Mymeta):
    ‘‘‘
    123456
    ‘‘‘
    def __init__(self):
        self.host = ‘127.0.0.1‘
        self.port = 3306

    def conn(self):
        pass

    def execute(self):
        pass


obj1 = Mysql()
obj2 = Mysql()
obj3 = Mysql()

print(obj1 is obj2 is obj3)

单例实现方式

标签:instance   usr   strip()   tle   single   bsp   mysql   type   方式   

原文地址:https://www.cnblogs.com/fmgao-technology/p/9127869.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!