元类实现单例,实现一个单例类


单例1:元类的单例

 1 import settings
 2 
 3 
 4 class Mymeat(type):
 5     调用__init__得到Mysql调用之前的时候就有一个默认的实例化的结果
 6     def __init__(self, class_name, class_bases, class_dic):
 7          创建一个初始化的对象,并把这个对象保存下来
 8         self.__instance = self.__new__(self)
 9          初始化对象的属性就是文件中的数据
10         self.__init__(self.__instance, settings.IP, settings.PORT)
11          继承子类的属性
12         super(Mymeat, self).__init__(class_name, class_bases, class_dic)
13 
14      调用__call__的方法就是自定义Mysql这个对象的调用过程要怎么实现
15     def __call__(self, *args, **kwargs):    # self=Mysql
16         if len(args) == 0 and len(kwargs) == 0:  判断是否传了参数,没传参就返回准备好的实例化对象,就是'文件对象'
17             return self.__instance
18         否则就重新实例化一个新的对象(包括属性,返回这个对象)
19         obj = self.__new__(self)
20         self.__init__(obj, *args, **kwargs)
21         return obj
22 
23 
24  自定义一个元类
25 class Mysql(object, metaclass=Mymeat):
26 
27     def __init__(self, ip, port):
28         self.ip = ip
29         self.port = port
30 
31 
32 obj1 = Mysql()
33 obj2 = Mysql()
34 obj3 = Mysql()
35 obj4 = Mysql('100.100.100.11', 3320)
36 print(obj1.__dict__)
37 print(obj2.__dict__)
38 print(obj3.__dict__)
39 print(obj4.__dict__)

 

 

相关内容

    暂无相关文章

评论关闭