A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

[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__)

2 个回复

倒序浏览
播妞 程序媛 2019-11-11 09:43:06
沙发
不错的技术贴,需要的自取
回复 使用道具 举报
播妞 程序媛 2019-11-11 09:43:10
藤椅
不错的技术贴,需要的自取
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马