[Python] 纯文本查看 复制代码 import settings
class Mymeat(type):
调用__init__得到Mysql调用之前的时候就有一个默认的实例化的结果
def __init__(self, class_name, class_bases, class_dic):
创建一个初始化的对象,并把这个对象保存下来
self.__instance = self.__new__(self)
初始化对象的属性就是文件中的数据
self.__init__(self.__instance, settings.IP, settings.PORT)
继承子类的属性
super(Mymeat, self).__init__(class_name, class_bases, class_dic)
调用__call__的方法就是自定义Mysql这个对象的调用过程要怎么实现
def __call__(self, *args, **kwargs): # self=Mysql
if len(args) == 0 and len(kwargs) == 0: 判断是否传了参数,没传参就返回准备好的实例化对象,就是'文件对象'
return self.__instance
否则就重新实例化一个新的对象(包括属性,返回这个对象)
obj = self.__new__(self)
self.__init__(obj, *args, **kwargs)
return obj
自定义一个元类
class Mysql(object, metaclass=Mymeat):
def __init__(self, ip, port):
self.ip = ip
self.port = port
obj1 = Mysql()
obj2 = Mysql()
obj3 = Mysql()
obj4 = Mysql('100.100.100.11', 3320)
print(obj1.__dict__)
print(obj2.__dict__)
print(obj3.__dict__)
print(obj4.__dict__)
|