精华内容
下载资源
问答
  • metaclass

    2021-03-10 19:43:32
    使用type()可以动态创建类,但要控制类的创建行为,还可使用metaclass,即元类 通常,当定义类以后,就可创建该类的实例,即先定义类,再创建实例 但要创建类,就必须根据metaclass先创建出类,然后再创建实例,即先...

    使用type()可以动态创建类,但要控制类的创建行为,还可使用metaclass,即元类
    通常,当定义类以后,就可创建该类的实例,即先定义类,再创建实例
    但要创建类,就必须根据metaclass先创建出类,然后再创建实例,即先定义metaclass,再创建类,最后再创建实例
    metaclass允许创建类或者修改类,因此可以把类看成是metaclass创建出来的"实例"

    metaclass是Python面向对象里最难理解,也是最难使用的魔术代码,使用的概率也非常小,基本不会用到,因此可以暂不学习
    具体可参照链接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017592449371072

    展开全文
  • metaClass

    2018-01-20 23:14:00
    In object-oriented programming, a metaclass is a class whose instances are classes. Just as an ordinary class defines the behavior of certain objects, a metaclass defines the behavior of certain...

    In object-oriented programming, a metaclass is a class whose instances are classes. Just as an ordinary class defines the behavior of certain objects, a metaclass defines the behavior of certain classes and their instances.fa

     

    元类定义了类的通用属性;

    是类方法;

    建立了类层面的依赖选择;

     

    + (Class)layerClass;                        // default is [CALayer class]. Used when creating the underlying layer for the view.

     

    它配置的属性或者是根、或者是他的更上一层的抽象。

    元类用于更改类的结构和行为。有缺省的结构。

    展开全文
  • MetaClass

    2018-09-06 23:21:00
    class Foo(metaclass=MyType): pass #python2 class Foo(object): __metaclass__ = MyType  注意下面的代码中的运行结果,如果某个基类执行谁来创建,那么继承这个基类的派生类也由这个谁来创建 ...

      它的作用主要是 指定由谁来创建类,默认是type

    #python3
    class Foo(metaclass=MyType):
        pass
    
    
    #python2
    class Foo(object):
        __metaclass__ = MyType
    

       注意下面的代码中的运行结果,如果某个基类执行谁来创建,那么继承这个基类的派生类也由这个谁来创建

    class MyType(type):
        def __init__(self,*args,**kwargs):
            print('init')
            super(MyType, self).__init__(*args, **kwargs)
    
        def __call__(self, *args, **kwargs):
            print('call本质:调用类的__new__,在调用init方法')
            return super(MyType, self).__call__(*args, **kwargs)
    
    class Foo(metaclass=MyType):
        def __call__(self, *args, **kwargs):
            print('123')
    
    class Bar(Foo):
        pass
    
    Foo()  #实例化对象,会执行负责创建类的type里的__call__方法
    obj = Bar()
    obj()  #对象+() 执行父类的里__call__方法
    

       应该见过这样创建类的吧,通过type创建Base = type('Base', (object,), {})

      所以我们通过继承type的自定义type类也是可以这么做的Base = MyType('Base', (object,), {}),那这个过程本质也就是和上面metaclass一样的效果,指定了MyType进行创建类

    class MyType(type):
        def __init__(self, *args, **kwargs):
            super(MyType, self).__init__(*args, **kwargs)
    
        def __call__(cls, *args, **kwargs):
            print('xxxx')
            return super(MyType, cls).__call__(*args, **kwargs)
    
    
    # Base = MyType('Base', (object,), {})
    
    # MyType('Base', (object,), {}) 是有MyType创建; metaclass=MyType
    # 1. type可以创建类metaclass=type;MyType也可以创建类metaclass=MyType
    # 2. Base = MyType('Base', (object,), {}) -->
    # class Base(metaclass=MyType):
    #     pass
    # class Foo(Base):
    #     pass
    
    class Foo(MyType('Base', (object,), {})):
        pass
    obj = Foo()
    

       所以这个Foo继承的是MyType创建的类,而Foo子类也会由MyType进行创建,似乎这种方式看起更简洁

      不过把创建Base类型整个过程都写在Foo继承上,难免有些看着有些糟心,另外base执行继承类也是写死了,我们可独立出一个函数进行封装,并动态实现传入继承类

    class MyType(type):
        def __init__(self, *args, **kwargs):
            super(MyType, self).__init__(*args, **kwargs)
    
        def __call__(cls, *args, **kwargs):
            return super(MyType, cls).__call__(*args, **kwargs)
    
    
    def with_metaclass(base):
        return MyType('XX', (base,), {})
    
    
    class Foo(with_metaclass(object)):
        pass
    

     

    转载于:https://www.cnblogs.com/xinsiwei18/p/9601915.html

    展开全文
  • meta class

    2018-07-13 10:10:54
    meta class class Type(type): def __init__(cls, name, bases, attr): print cls, name, bases, attr def __new__(meta, cls_str, cls, args_dict): print cls_str, cls, args_dict ...

    meta class

    class Type(type):
        def __init__(cls, name, bases, attr):
            print cls, name, bases, attr
    
        def __new__(meta, cls_str, cls, args_dict):
            print cls_str, cls, args_dict
            return super(Type, meta).__new__(meta, cls_str, cls, args_dict)
    
        def __call__(cls, *args, **kwargs):
            print 'new'
            self = cls.__new__(cls, *args, **kwargs)
            if isinstance(self, cls):
                print 'init'
                self.__init__(*args, **kwargs)
            print 'return'
            return self
    
    
    class Object(object):
        __metaclass__ = Type
    
        def __new__(cls, *args, **kwargs):
            print "__new__", args, kwargs
            return object.__new__(cls, *args, **kwargs)
    
        def __init__(self, *a, **kw):
            print "__init__", a, kw
    
    Object(1, 2, 3)
    展开全文
  • python __metaclass__
  • class&meta class

    2016-03-21 11:09:00
    当我们发送一个消息给一个NSObject对象时,这条消息会在对象的类...而 Meta Class本身也是一个Class,它跟其他Class一样也有自己的 isa 和 super_class 指针 每个Class都有一个isa指针指向一个唯一的Meta Class每...
  • Python type class metaclass

    2016-10-01 22:10:00
    'type' 是 python built-in metaclass 其他继承自 ‘type’的class都可以是 Metaclass 子类可以继承父类的metaclass 然而 __metaclass__属性不能继承 __metaclass__可以定义成任何返回instance of 'type' ...
  • 本文实例讲述了python中metaclass原理与用法。分享给大家供大家参考,具体如下: 什么是 metaclass. metaclass (元类)就是用来创建类的类。在前面一篇文章《python动态创建类》里我们提到过,可以用如下的一个观点来...
  • Python MetaClass

    2019-12-01 20:39:41
    metaclass继承关系 class Foo(metaclass=type): pass class MyType(type): def __init__(self,*args,**kwargs): print('init') super(MyType,self).__init__(*args,**kwargs) def __call__(self, *args, *...
  • python metaclass

    2019-09-24 11:38:51
    1. 也许你在阅读别人的代码的时候碰到过metaclass,那你可以参考这里的介绍。 2. 或许你需要设计一些底层的库,也许metaclass能帮你简化你的设计(也有可能复杂化:) 3. 也许你在了解metaclass的相关知识之后,你...
  • 详解Python MetaClass

    2021-06-10 20:35:55
    这里写自定义目录标题详解Python MetaClass什么是MetaClassType类用type实例化类动态创建类原类的使用和继承原类的使用场景实现ORM验证类避免继承属性单例总结参考 详解Python MetaClass 什么是MetaClass 原类(Meta...
  • <p>One would expect the <em>metaclass</em> of <code>C</code> to be <code>MetaC</code> but the console says otherwise <pre><code> MetaA.__new__ <class> C (<class>,) {'$line_info': &...
  • Support metaclass subclasses

    2020-12-29 03:01:36
    <div><p>Descendants should check if the class is a Metaclass. Added test also.</p><p>该提问来源于开源项目:pdoc3/pdoc</p></div>
  • 彻底了解python元类metaclass: 如何用type创建类 什么是元类及元类如何定义 案例:wtforms源码分析 案例:元类实现单例模式
  • metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases <p>Thank you.</p><p>该提问来源于开源项目:grow/grow</p></div>
  • TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases <p><strong>To Reproduce 1. Creat a new file: run.py <pre><code> from...
  • <div><p>Metaclass is used in several places in NVDA code. Python3 changed the syntax of using a metaclass and it is not compatible with python 2. <p>Py2: syntax <strong>metaclass</strong> = xxx Py...
  • In the real world I might not actually control the metaclass for <code>Foo</code> or I may be inheriting from some other class that also has a metaclass. <pre><code> from typing import Generic, Type...
  • Python metaclass

    2017-09-03 15:06:25
    Python metaclass简介python中的类可以由type来动态的创建type(name,bases,dct) name: 将要被创建的class的名字 bases: 指定将要被创建类的夫类 dct: 类中的属性 metaclass 为python中的语法糖, 目的在于让python...
  • Python Metaclass

    2019-09-13 19:24:55
    在弄明白 metaclass 之前,你应该先清楚地知道什么是 Python 中的类(Class)。Python 中的这种从 Smalltalk 语言中借鉴而来的类十分奇怪。 在大部分的编程语言中,类就是一段用来描述怎样产生对象(Object)的代码...
  • 主要介绍了python单例模式与metaclass,文章介绍了单例模式的实现方式
  • python3 之metaclass

    2019-06-28 16:24:00
    如果希望创建某一批类全部具有某种特征,则可通过 metaclass 来实现。使用 metaclass 可以在创建类时动态修改类定义。为了使用 metaclass 动态修改类定义,程序需要先定义 metaclass, metaclass 应该继承 type 类,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,645
精华内容 11,458
关键字:

metaclass