zoukankan      html  css  js  c++  java
  • python元编程2【type类创建对象2种方法】

    1. return type(name, bases, attr) 和 return type.new(cls, 'name',(object,), {})
    
    # # type 类创建对象方法1【class_ = ModelObject('name',(Test,),{})】
    class SetterAwareType(type):    # 元类
        def __new__(cls, *args):
            print('in SetterAwareType __new__')
            return type.__new__(cls, *args)   # return 方式1,这种方式执行__init__函数
            name, bases, attr = args[:3]
            return type(name, bases, attr)     # return 方式2 ,这种方式不走__init__函数了,不打印 in SetterAwareType __init__
    
        def __init__(cls,  *args):
            print('in SetterAwareType __init__')
            return type.__init__(cls, *args)   # TypeError: type.__init__() takes 1 or 3 arguments
    
    class ModelObject(SetterAwareType):
        pass
    
    class Test(object):
        def test(self):
            print('in class Test test')
    
    class_ = ModelObject('name',(Test,),{})
    obj = class_()
    obj.test()
    
    
    
    # type 类创建对象方法2【a = ModelObject()】
    class SetterAwareType(type):    # 元类
        def __new__(cls, *args):
            print('in SetterAwareType __new__')
            return type.__new__(cls, 'name',(object,), {})  # 'name' 直接传入了
    
        def __init__(cls,  *args):
            print('in SetterAwareType __init__')
            return super(SetterAwareType, cls).__init__(cls,  *args)
            # return type.__init__(cls, *args)   # TypeError: type.__init__() takes 1 or 3 arguments
    
    
    class ModelObject(SetterAwareType):
        def test(self):
            print('in ModelObject copy')
    
    a = ModelObject()
    a.test()
    
    
    
  • 相关阅读:
    BZOJ2039: [2009国家集训队]employ人员雇佣
    BZOJ2542: [Ctsc2001]终极情报网
    BZOJ2140: 稳定婚姻
    BZOJ3280: 小R的烦恼
    BZOJ3258: 秘密任务
    BZOJ2400: Spoj 839 Optimal Marks
    BZOJ3171: [Tjoi2013]循环格
    BZOJ1758: [Wc2010]重建计划
    BZOJ3175: [Tjoi2013]攻击装置
    机房破解程序
  • 原文地址:https://www.cnblogs.com/amize/p/14681761.html
Copyright © 2011-2022 走看看