黑马程序员技术交流社区

标题: 【上海校区】元类实现单例模式 [打印本页]

作者: 阎兆辉    时间: 2019-11-7 19:16
标题: 【上海校区】元类实现单例模式
[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__)


作者: 播妞    时间: 2019-11-11 09:43
不错的技术贴,需要的自取
作者: 播妞    时间: 2019-11-11 09:43
不错的技术贴,需要的自取




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2