• 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__方法来控制类的产生
  • 相关阅读:
    Mac Pro 安装 Sublime Text 2.0.2,个性化设置,主题 和 插件 收藏
    Mac Pro 编译安装 Nginx 1.8.1
    Mac Pro 解压安装MySQL二进制分发版 mysql-5.6.30-osx10.11-x86_64.tar.gz(不是dmg的)
    Mac Pro 修改主机名
    Mac Pro 软件安装/个性化配置 汇总
    Mac Pro 安装 Homebrew 软件包管理工具
    Mac Pro 使用 ll、la、l等ls的别名命令
    Mac Pro 入门、遇到的问题、个性化设置 汇总
    Linux/UNIX线程(2)
    工作流引擎activiti入门
  • 原文地址:https://www.cnblogs.com/whnbky/p/11460183.html
Copyright © 2020-2023  润新知