zoukankan      html  css  js  c++  java
  • dayday up

    模板:控制对象的产生
    class Mymeta(type):
        def __call__(self, *args, **kwargs):
            obj=object.__new__(self)
            obj.__init__(*args, **kwargs)
            return obj
    
    class Person(metaclass=Mymeta):
        def __init__(self,name):
            self.name=name
        def __call__(self, *args, **kwargs):
            print('xxx')
    
    p=Person('lqz')
    #type只传一个参数有什么用?
    #打印对象的类型
    # print(type(1))
    #class 底层原理,通过type类来实例化得到类
    # def __init__(self,name):
    # self.name=name
    # Person=type('Person',(object,),{'x':1,'__init__':__init__})
    # p=Person('lqz')
    # print(Person.__dict__)
    # print(p.__dict__)
    # print(p.x)
    #等同于
    # class Person(object):
    # x=1
    # def __init__(self, name):
    # self.name = name
    # p=Person('lqz')
    # print(Person.__dict__)
    # print(p.__dict__)
    # print(p.x)


    #exec 执行字符串的代码,当成python解释器

    # ss='''
    # x=1
    # print(x)
    # '''
    # g={}
    # l={}
    # exec(ss,g,l)
    # print(l)


    #自定义元类:继承type
    # class Mymeta(type):
    # def __init__(self,name,bases,dic):
    # #self 是Person 这个类(对象)
    # #在这个位置,其实self也就说Person这个类,内部已经有东西了,名称空间已经有东西了
    # #所以在这个地方,可以通过dic来判断名称空间
    # #也可以直接通过self.__dict__/self.属性 来判断
    # a=dic.get('name')
    # if not a :
    # raise Exception('没有name属性,不能创建')
    # # def __call__(self, *args, **kwargs):
    # # pass
    #
    # class Person(metaclass=Mymeta): #Person=Mymeta('Person',(object,),{...}) Mymeta类实例化,会把三个参数传到Mymeta的__init__方法中
    # # class Person(): #Person=Mymeta('Person',(object,),{...}) Mymeta类实例化,会把三个参数传到Mymeta的__init__方法中
    # def __init__(self,name):
    # self.name=name
    # raise Exception('就不让你创建')
    #
    #
    # p=Person('lqz') #自动触发Person类__init__的执行
    #总结:可以通过自定义元类,重写__init__方法来控制类的产生
  • 相关阅读:
    只能输入正整数 以及常用的正则表达式 (转载)
    SVN cleanup操作反复失败解决办法 (转载)
    关于${pageContext.request.contextPath}的理解 (转载)
    Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds
    一则Oracle EXP导出报错的解决办法(转载)
    js数组的sort排序详解(转载)
    JavaScript arguments对象(转载)
    转 :meta name的含义
    一些小问题
    005.JMS可靠性机制
  • 原文地址:https://www.cnblogs.com/whnbky/p/11460183.html
Copyright © 2011-2022 走看看