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__方法来控制类的产生
  • 相关阅读:
    开发3dMax插件的方法和应用
    实现X*N
    fork与vfork的区别
    使用递归算法写一段程序
    宏和函数的区别
    多线程学习(一)
    [算法天天练]堆排序
    [转][算法天天练]堆与堆排序
    [转]快速排序 挖坑讲解方法
    [算法天天练]选择排序法
  • 原文地址:https://www.cnblogs.com/whnbky/p/11460183.html
Copyright © 2011-2022 走看看