美文网首页
python __new__静态方法

python __new__静态方法

作者: 第八共同体 | 来源:发表于2018-01-06 13:58 被阅读0次

    看下面的实例:

    import collections
    
    class OrderAttribute(type):
    
        @classmethod
        def __prepare__(metacls, name, bases, **kwds):
            return collections.OrderedDict()
    
    
        def __new__(cls, name, bases, namespace, **kwds):
            result = super(OrderAttribute, cls).__new__(cls, name, bases, namespace)
            result._order = tuple(n for n in namespace if not n.startswith('__'))
            return result
    
    
    class OrderPreserved:
        __metaclass__ = OrderAttribute
    
    class Something(OrderPreserved):
        this = 'text'
        def z(self):
            return False
        b = 'order is preserved'
        c = 'more text'
    
    
    
    if __name__ == '__main__':
        print(Something._order)
        # ('this', 'z', 'b', 'c')
    

    通常我们使用内置的type创建的类型会使用dict来存储不同的属性和方法。因为字典时无序的,所以属性和方法没有和特别的顺序。我们可以使用__prepare__特殊方法,该方法在类创建之前执行。它的工作时创建初始的命令空间对象,类定义最后被添加到这个对象中。这个方法可以处理任何在类的主体开始执行前需要的准备工作。__new__静态方法在类的主体被加入命名空间后开始执行。它的参数时要创建的类对象,类名,基类的元组和创建好的 命名空间匹配对象。上面这个例子将__new__的真正工作委托给了基类。

    相关文章

      网友评论

          本文标题:python __new__静态方法

          本文链接:https://www.haomeiwen.com/subject/lcdynxtx.html